En esta entrada, vamos a ver cómo configurar Laravel para que los usuarios puedan iniciar sesión tanto con el nombre de usuario (username) como con el email.
Vamos al archivo LoginController.php. En este archivo, vemos que se está utilizando un trait llamado AuthenticatesUsers. En este trait, hay una función llamada username() que lo que hace es devolver la cadena de texto ‘username’. Nosotros, vamos a sobreescribir este método para comprobar si llega un correo o un nombre de usuario y devolver ‘email’ si es un correo o ‘username’ si es un nombre de usuario.
1 2 3 4 5 6 7 8 9 |
... public function username() { $loginData = request()->input('login'); $fieldName = filter_var($loginData, FILTER_VALIDATE_EMAIL) ? 'email' : 'username'; request()->merge([$fieldName => $loginData]); return $fieldName; } ... |
Una vez tenemos esto, lo que tenemos que hacer es un cambio pequeño en la vista de login.blade.php. Tenemos que cambiar el campo de email por esto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<div class="form-group row"> <label for="login" class="col-md-4 col-form-label text-md-right">{{ __('Username or E-Mail Address') }}</label> <div class="col-md-6"> <input id="login" type="text" class="form-control @if ($errors->has('username') || $errors->has('email')) is-invalid @endif" name="login" value="{{ old('username') ?: old('email') }}" required autocomplete="login" autofocus > @if ($errors->has('username') || $errors->has('email')) <span class="invalid-feedback" role="alert"> <strong>{{ $errors->first('username') ?: $errors->first('email') }}</strong> </span> @endif </div> </div> |
En la vista, estamos controlando si hay errores y comprobamos si es del ‘username’ o ‘email’. Si hay algún error de ‘username’ o ‘email’, mostrará el error y el contenido del campo enviado gracias al helper old().
muchas gracias, me sirvió para aplicarlo en mi proyecto, gracias vreaxe