Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save vaporic/a662b35ef99f446f52469b8553ce04af to your computer and use it in GitHub Desktop.

Select an option

Save vaporic/a662b35ef99f446f52469b8553ce04af to your computer and use it in GitHub Desktop.

Revisions

  1. @amamarul amamarul created this gist May 6, 2018.
    46 changes: 46 additions & 0 deletions Laravel-login-username-default-auth.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,46 @@
    # 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**