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