Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • 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

@Viclo
Copy link

Viclo 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
Copy link

Yovito 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 !

@emmaenk
Copy link

emmaenk commented Apr 15, 2020

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 !

no tiene por que maneja eloquent que es la manera más sencilla de utilizar sql en laravel

@BlesSka
Copy link

BlesSka commented Aug 31, 2020

Como tendria que hacer si quiero validar 3 campos (network, username, password)?

@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