Saltar al contenido

9 consejos rápidos para la autenticación en Laravel – Laravel News


25 de agosto de 2020
/
PovilasKorop

Laravel tiene un excelente sistema de autenticación listo para usar, pero seguramente necesitamos personalizar las cosas aquí y allá. Para algunos de ellos, no es necesario buscar paquetes externos o escribir mucho código personalizado, exploremos qué habilidades interesantes se esconden bajo el capó de Auth.

Consejo 1. Parámetros de Auth :: rutas ()

Probablemente todos conocemos el método Auth::routes() que proviene del paquete de interfaz de usuario de Laravel (antes de Laravel 7, se incluía en el núcleo).

Pero, ¿sabía que puede aceptar una serie de parámetros para habilitar / deshabilitar ciertas rutas de autenticación?

A partir de Laravel 7, aquí hay posibles parámetros, con sus valores predeterminados:

Esos parámetros solo habilitan o deshabilitan algunas rutas.

Para comprender cómo funcionan, puede mirar el archivo AuthRouteMethods en Laravel UI:

Consejo 2. UI de Laravel: generar solo controladores

La documentación oficial especifica esta forma principal de usar Laravel UI:

Pero, ¿y si no necesitas la interfaz de usuario visual? ¿Qué pasa si está creando solo un proyecto basado en API y no tiene ningún front-end en el lado de Laravel?

Todavía puede usar Laravel Auth y sus controladores. Instale el paquete de interfaz de usuario de Laravel y ejecute esto:

Generará solo app/Http/Controllers/Auth contenidos, por lo que no necesita archivos Blade / Vue para usarlos.

Vea la implementación de este comando Artisan en el repositorio de Github.

Consejo 3. Vuelva a confirmar la contraseña para configuraciones importantes

¿Alguna vez ha mantenido un repositorio de Github y ha intentado cambiar su configuración de acceso? Luego, Github le pide que vuelva a ingresar su contraseña, solo para asegurarse de que sea usted.

Desde Laravel 6.2, también tenemos esa característica en el marco.

Todo lo que necesita hacer es agregar un Middleware llamado password.confirm a la (s) ruta (s) que desea proteger.

Citando a Dries Vints del artículo oficial de lanzamiento de funciones:

Si intenta acceder a la ruta, se le pedirá que confirme su contraseña, similar a lo que pudo haber visto en otras aplicaciones como GitHub.

Confirmar la contraseña almacenará una marca de tiempo en la sesión del usuario que durará tres horas de forma predeterminada para que los usuarios no tengan que volver a introducir su contraseña durante ese período.

Puede personalizar esta duración con un nuevo password_timeout opción de configuración en el auth archivo de configuración._

Consejo 4. Cerrar sesión en otros dispositivos

Desde Laravel 5.6, tenemos un método separado para cerrar sesión automáticamente en cualquier otro dispositivo o navegador que haya iniciado sesión con nuestra cuenta:

El uso típico de esto sería cerrar la sesión de otros dispositivos cuando el dispositivo actual haya iniciado sesión correctamente. Para hacerlo, anulamos un método authenticated() de un rasgo AuthenticatesUsers.phpy poner esto en app/Http/Controllers/Auth/LoginController.php:

Además, no olvide activar un middleware AuthenticateSession en app/Http/Kernel.php archivo, que está comentado de forma predeterminada:

Redirigir después de iniciar sesión / registrarse: lógica personalizada

De forma predeterminada, tanto Laravel LoginController como RegisterController tienen la misma propiedad:

Por lo tanto, puede especificar a qué URL redireccionar después de iniciar sesión / registrarse correctamente. El valor predeterminado está en app/Providers/RouteServiceProvider.php:

¿Cómo puedes personalizarlo?

Primero, puede cambiar el valor de ese $redirectTo propiedad, a alguna otra constante, y tal vez por separado para Inicio de sesión y Registro.

Pero, ¿y si tienes una lógica más compleja de dinámica redireccionar, que depende de la función del usuario, por ejemplo?

Puedes crear un método en esos Auth Controllers, llámalo redirectTo()y especifique sus condiciones en el interior. Ese método anulará cualquier valor de $redirectTo propiedad.

Ver ejemplo:

Consejo 5. Cree nuevos usuarios rápidamente

¿Qué sucede si necesita crear un nuevo usuario y no tiene un formulario de registro listo?

Solo abre Laravel Tinker en tu Terminal:

Si no está familiarizado con Tinker, es una herramienta de línea de comandos para ejecutar cualquier código Laravel / PHP. Entonces, dentro de eso, puede crear fácilmente un usuario, escribiendo este comando Eloquent y presionando Enter:

Pero, ¿qué sucede si necesita crear muchos usuarios para realizar pruebas, como 10, 100 o 1000? No hay problema, podemos usar una clase Factory que viene por defecto con Laravel, en database/factories/UserFactory.php:

Estos son valores predeterminados para el usuario “falso” que podemos crear. Para hacer eso, generaremos un archivo Seeder:

Luego, abrimos ese archivo generado database/seeds/UsersSeeder.php y llenar run() método con esto:

Para ejecutar eso, necesitamos ejecutar este comando:

Puede leer más sobre la siembra de bases de datos en la documentación oficial de Laravel.

Consejo 6. Inicie sesión con correo electrónico y / o nombre de usuario

De forma predeterminada, los usuarios de Laravel se autentican con correo electrónico y contraseña. Pero, ¿y si su identificador no es el correo electrónico? Algún tipo de nombre de usuario, por ejemplo.

Puede cambiarlo fácilmente anulando un método de la AuthenticatesUsers.php rasgo.

Este es el valor predeterminado:

Puedes copiar eso en tu LoginController.php y simplemente cambie el valor:

Demos un paso más allá. ¿Qué pasa si sus usuarios pueden iniciar sesión con correo electrónico O nombre de usuario? Entonces, hay un campo de entrada llamado “Correo electrónico / nombre de usuario” y pueden ingresar uno u otro.

Agreguemos un “truco” al mismo username() método de arriba. Verificamos si la cadena ingresada es un correo electrónico, de lo contrario, lo tratamos como un nombre de usuario. Esa verificación es una función de PHP, ni siquiera Laravel.

darse cuenta: no olvide que en su formulario de inicio de sesión, debe cambiar input type="email" a type="text"

Consejo 7. Demasiados intentos de inicio de sesión: personalizar parámetros

Si intenta iniciar sesión con credenciales no válidas más de cinco veces en el mismo minuto, se le bloqueará con un mensaje Demasiados intentos de inicio de sesión. Vuelva a intentarlo en X segundos.

Ese bloque estará activo durante 1 minuto y es exclusivo para el nombre de usuario / correo electrónico del usuario y su dirección IP.

Puede personalizar esos parámetros:

Esos dos parámetros están dentro de un rasgo ThrottlesLogins:

Por lo tanto, para anularlos, puede especificar propiedades dentro de su LoginController:

Consejo 8. Registro: deshabilite el inicio de sesión automático

De forma predeterminada, un usuario recién registrado inicia sesión automáticamente y es redirigido a la página de inicio.

Si desea desactivar eso y mostrar alguna página de “éxito” en su lugar, sin crear automáticamente una sesión de usuario, esto es lo que puede hacer.

El método de registro original está dentro del rasgo RegistersUsers:

Entonces tu objetivo es anularlo en RegisterController y devuelva una redirección a su nueva página, en lugar de iniciar sesión:

Consejo 9. Iniciar sesión: Verificación adicional con correo electrónico / contraseña

¿Qué sucede si necesita una verificación adicional, además del correo electrónico y la contraseña predeterminados? Por ejemplo, desea verificar si el usuario está activo o no bloqueado.

Puede agregar elementos adicionales a credentials matriz, que se define en el rasgo AuthenticatesUsers:

Simplemente anula esto en LoginController y agrega lo que quieras:

darse cuenta: este es un consejo rápido interesante, pero le aconsejo que realice dicha verificación adicional en un Middleware separado, luego podría proporcionar un mensaje de error más explícito al usuario, en lugar de un error de credenciales predeterminado.

Eso es todo, estos son los rápido consejos, pero hay mucho más que ampliar con código personalizado y paquetes externos. ¡Por lo tanto, estad atentos a más artículos sobre ese tema!

Este contenido se publicó originalmente aquí.