Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Como hacer login en Laravel con username en lugar de por email utilizando la autenticación por defecto

Como hacer login con username en lugar de por email

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

@Viclo

This comment has been minimized.

Copy link

commented May 3, 2019

Disculpa, en el caso que ya cuente con otra tabla llamada cuenta y quiera redireccionar el User por defecto de Laravel a mi modelo Cuenta, qué modificaciones debería hacer para que siga corriendo con el make:auth?

@Yovito

This comment has been minimized.

Copy link

commented Jun 9, 2019

genial, gracias me ayudó bastante, solo una pregunta mas, por casualidad sabes en que parte de laravel tienen escondido el

select * from user where ......

gracias !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.