Added Support for Username or Email with Laravel 5.8
- by Admin
- 03 March 2019
- 2161 views

Hello, Thank's for sharing sudiptpa and now i want to rewrite article. If you want custom login with username in laravel 5.8 you can follow this article
1. Create new migration.
$ php artisan make:migration add_username_to_users --table=users
2. add Field username migration to table users.
$table->string('username')->unique();
3. Execute migration and check table user for make sure field.
4. Custom LoginController
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
/**
* Get the needed authorization credentials from the request.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
protected function credentials(Request $request)
{
$field = $this->field($request);
return [
$field => $request->get($this->username()),
'password' => $request->get('password'),
];
}
/**
* Determine if the request field is email or username.
*
* @param \Illuminate\Http\Request $request
* @return string
*/
public function field(Request $request)
{
$email = $this->username();
return filter_var($request->get($email), FILTER_VALIDATE_EMAIL) ? $email : 'username';
}
/**
* Validate the user login request.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function validateLogin(Request $request)
{
$field = $this->field($request);
$messages = ["{$this->username()}.exists" => 'The account you are trying to login is not registered or it has been disabled.'];
$this->validate($request, [
$this->username() => "required|exists:users,{$field}",
'password' => 'required',
], $messages);
}
}
4. Add username from model User
protected $fillable = [
'name', 'email', 'password', 'username'
];
5. Edit route
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Auth::routes(['verify' => true]);
Route::get('/home', 'HomeController@index')->name('home')->middleware('verified');
6. Edit login.php
@extends('layouts.app')
@section('content')
{{ __('Login') }}
@endsection
7. Test login with username for make sure.
Refrence : Github
Comments