Personalizar el auth, para autenticarse con el username en Laravel, puede sernos oportuno, si necesitamos un comportamiento mas estricto del modo de acceso a nuestra aplicación.
Los cambios necesarios, incluyen modificar todo lo relacionado con el Login, o sea la Migración, el Modelo, el Controlador y la Vista.
El controlador encargado del login es Login Controller( App\Http\Controllers\Auth\LoginController).
Es el encargado de implementar el trait AuthenticatesUsers encargado de la validación del que se ejecuta al loguearse.
Como el método validateLogin() valida el campo email por defecto, partiendo del del método username() que retorna automáticamente el campo email, hay que cambiar algunos cosas para modificar este proceso y que nos devuelva el campo username.
Lo primero es en la migración de la tabla users (2014_10_12_000000_create_users_table.php)
agregar el campo username
, con el 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();
});
Lo segundo es declarar lógicamente este campo como un campo fillable
, agregándolo en el modelo(App/User)
protected $fillable = [
'username', 'name', 'email', 'password',
];
Igualmente como tercer paso, necesitamos agregar el metodo username()
en el controlador App\Http\Controllers\Auth\LoginController,
para que nos retorne el valor username que necesitamos.
public function username()
{
return 'username';
}
Por último en la vista, debemos hacer los cambios para modificar el formulario del login.
Aquí es preciso sustituir el campo de tipo email, por un campo de tipo text, y cambiarle valor de la etiqueta 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 esto es todo
Espero sinceramente, que esto sirviera de ayuda a alguien
El elefante no necesita decirle a nadie cuan grande es, le basta con caminar.
NS