El controlador App\Http\Controllers\Auth\LoginController
implementa el trait AuthenticatesUsers
y este es el encargado de realizar la validación del Login. El método validateLogin()
valida el campo email
por defecto pero este lo obtiene del método username()
que retorna el campo email
por eso si lo que queremos es validar el login por otro campo (En este ejemplo será el campo 'username') debemos:
1- En la migracion de la tabla users
(2014_10_12_000000_create_users_table.php
) agregar el campo username
es importante que este sea de tipo unique
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('username')->unique();
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
2- En el modelo App\User
agregar el campo username
a los fillables.
protected $fillable = [
'username', 'name', 'email', 'password',
];
3- En el controlador App\Http\Controllers\Auth\LoginController
agregar el método username()
public function username()
{
return 'username';
}
4- En la vista blade auth/login.blade.php
modificar el formulario de login. En lugar de un campo de tipo email
colocamos como campo text
y además tenemos que cambiar el name.
<div class="form-group row">
<label for="username" class="col-sm-4 col-form-label text-md-right">{{ __('Username') }}</label>
<div class="col-md-6">
<input id="email" type="text" class="form-control{{ $errors->has('username') ? ' is-invalid' : '' }}" name="username" value="{{ old('username') }}" required autofocus>
@if ($errors->has('username'))
<span class="invalid-feedback">
<strong>{{ $errors->first('username') }}</strong>
</span>
@endif
</div>
</div>
Y listo, podemos utilizar el auth por defecto de Laravel pero ahora nos logueamos utilizando el username en lugar del email