Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save amamarul/e73a6651d97eb2bc256666275d3b0db3 to your computer and use it in GitHub Desktop.
Save amamarul/e73a6651d97eb2bc256666275d3b0db3 to your computer and use it in GitHub Desktop.
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

@josenassr
Copy link

una pregunta si quiero que al logearse ingrese 3 campos en vez de dos (email,rif,password)?

@drewkenobi
Copy link

Hey! muchas gracias, excelente ayuda. Saludos.

@estarly
Copy link

estarly commented Sep 13, 2022

hola, se puede tener 2 campos para loguear, ejemplo....
email and password
y
email and password_otro

@Alecrak08
Copy link

gracias me sirvio solo me falto añadir la funcion username gracias

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment