Autenticación
ADVERTENCIA: Está buscando en la documentación una versión antigua de Laravel. Considere actualizar su proyecto a Laravel 8.x.
- Introducción
- Autenticar Usuarios
- Recuperar El Usuario Autenticado
- Proteger Rutas
- Autenticación Básica HTTP
- Recordatorios de contraseña & Restablecer
- Autenticación social
Introducción
Laravel hace que implementar la autenticación sea muy simple. De hecho, casi todo está configurado para usted fuera de la caja. El archivo de configuración de autenticación se encuentra en config/auth.php
, que contiene varias opciones bien documentadas para ajustar el comportamiento de los servicios de autenticación.
De forma predeterminada, Laravel incluye un modelo App\User
en su directorio app
. Este modelo se puede usar con el controlador de autenticación Eloquent predeterminado.
Recuerde: al crear el esquema de base de datos para este modelo, haga que la columna de contraseña tenga al menos 60 caracteres. Además, antes de comenzar, asegúrese de que su tabla users
(o equivalente) contenga una columna remember_token
de cadena anulada de 100 caracteres. Esta columna se utilizará para almacenar un token para las sesiones de «recordarme» que mantiene su aplicación. Esto se puede hacer usando $table->rememberToken();
en una migración. Por supuesto, Laravel 5 migraciones de naves para estas columnas fuera de la caja!
Si su aplicación no utiliza Eloquent, puede utilizar el controlador de autenticación database
que utiliza el generador de consultas Laravel.
Autenticar usuarios
Laravel se envía con dos controladores relacionados con la autenticación listos para usar. El AuthController
maneja el registro de nuevos usuarios y el» inicio de sesión», mientras que el PasswordController
contiene la lógica para ayudar a los usuarios existentes a restablecer sus contraseñas olvidadas.
Cada uno de estos controladores utiliza un rasgo para incluir sus métodos necesarios. Para muchas aplicaciones, no necesitará modificar estos controladores en absoluto. Las vistas que estos controladores renderizan se encuentran en el directorio resources/views/auth
. Usted es libre de personalizar estas vistas como desee.
El Registrador de usuarios
Para modificar los campos de formulario que se requieren cuando un nuevo usuario se registra en su aplicación, puede modificar la clase App\Services\Registrar
. Esta clase es responsable de validar y crear nuevos usuarios de su aplicación.
El método validator
de Registrar
contiene las reglas de validación para los nuevos usuarios de la aplicación, mientras que el método create
de Registrar
es responsable de crear nuevos registros User
en su base de datos. Usted es libre de modificar cada uno de estos métodos como desee. El Registrar
es llamado por el AuthController
a través de los métodos contenidos en el rasgo AuthenticatesAndRegistersUsers
.
Autenticación manual
Si elige no usar la implementación AuthController
proporcionada, deberá administrar la autenticación de sus usuarios utilizando las clases de autenticación Laravel directamente. No te preocupes, sigue siendo pan comido. Primero, echemos un vistazo al método attempt
:
El método attempt
acepta una matriz de pares clave / valor como primer argumento. El valor password
se hash. Los otros valores de la matriz se utilizarán para encontrar al usuario en la tabla de la base de datos. Así, en el ejemplo anterior, el usuario será recuperado por el valor de la email
columna. Si se encuentra el usuario, la contraseña con hash almacenada en la base de datos se comparará con el valor password
con hash pasado al método a través de la matriz. Si las dos contraseñas con hash coinciden, se iniciará una nueva sesión autenticada para el usuario.
El método attempt
devolverá true
si la autenticación se realizó correctamente. De lo contrario, se devolverá false
.
Nota: En este ejemplo,
La función de redireccionamiento intended
redirigirá al usuario a la URL a la que intentaba acceder antes de ser capturado por el filtro de autenticación. Se puede dar un URI de reserva a este método en caso de que el destino previsto no esté disponible.
Autenticar a un Usuario Con Condiciones
También puede agregar condiciones adicionales a la consulta de autenticación:
if (Auth::attempt()){ // The user is active, not suspended, and exists.}
Determinar si un Usuario está Autenticado
Para determinar si el usuario ya ha iniciado sesión en su aplicación, puede usar el método check
:
if (Auth::check()){ // The user is logged in...}
Autenticar a un Usuario y» Recordarlo «
Si desea proporcionar la funcionalidad «recordarme» en su aplicación, puede pasar un valor booleano como segundo argumento al método attempt
, que mantendrá al usuario autenticado indefinidamente, o hasta que cierre la sesión manualmente. Por supuesto, su tabla users
debe incluir la columna string remember_token
, que se utilizará para almacenar el token «recuérdame».
if (Auth::attempt(, $remember)){ // The user is being remembered...}
Si está «recordando» usuarios, puede usar el método viaRemember
para determinar si el usuario se autenticó utilizando la cookie» recordarme»:
if (Auth::viaRemember()){ //}
Autenticación de usuarios por ID
Para iniciar sesión con un usuario en la aplicación por su ID, utilice el método loginUsingId
:
Auth::loginUsingId(1);
Validación de credenciales de usuario Sin Iniciar sesión
El método validate
le permite validar las credenciales de un usuario sin iniciar sesión en la aplicación:
if (Auth::validate($credentials)){ //}
Iniciar sesión de un Usuario Para Una Sola Solicitud
También puede usar el método once
para iniciar sesión de un usuario en la aplicación para una sola solicitud. No se utilizarán sesiones ni cookies:
if (Auth::once($credentials)){ //}
Iniciar sesión manualmente en un Usuario
Si necesita iniciar sesión en una instancia de usuario existente en su aplicación, puede llamar al método login
con la instancia de usuario:
Auth::login($user);
Esto equivale a iniciar sesión en un usuario a través de credenciales utilizando el método attempt
.
Cerrar sesión de Un Usuario De La Aplicación
Auth::logout();
Por supuesto, si está utilizando los controladores de autenticación Laravel integrados, se proporciona un método de controlador que maneja el cierre de sesión de los usuarios de la aplicación.
Eventos de autenticación
Cuando se llama al método attempt
, se disparará el evento auth.attempt
. Si el intento de autenticación es exitoso y el usuario ha iniciado sesión, también se disparará el evento auth.login
.
Recuperar el Usuario Autenticado
Una vez que un usuario se autentica, hay varias formas de obtener una instancia del Usuario.
En primer lugar, puede acceder al usuario desde la fachada Auth
:
En segundo lugar, puede acceder al usuario autenticado a través de una instancia Illuminate\Http\Request
:
En Tercer lugar, puede escribir el contrato Illuminate\Contracts\Auth\Authenticatable
. Esta sugerencia de tipo se puede agregar a un constructor de controlador, método de controlador o cualquier otro constructor de una clase resuelta por el contenedor de servicio:
Proteger rutas
El middleware de rutas se puede usar para permitir que solo los usuarios autenticados accedan a una ruta determinada. Laravel proporciona el middleware auth
de forma predeterminada, y está definido en app\Http\Middleware\Authenticate.php
. Todo lo que necesita hacer es adjuntarlo a una definición de ruta:
Autenticación básica HTTP
La autenticación básica HTTP proporciona una forma rápida de autenticar a los usuarios de su aplicación sin configurar una página de «inicio de sesión» dedicada. Para comenzar, adjunte el middleware auth.basic
a su ruta:
Proteger una Ruta Con HTTP Basic
Route::get('profile', );
De forma predeterminada, el middleware basic
utilizará la columna email
en el registro de usuario como «nombre de usuario».
Configurar un filtro Básico HTTP Sin Estado
También puede usar la autenticación básica HTTP sin configurar una cookie de identificador de usuario en la sesión, lo que es particularmente útil para la autenticación de API. Para ello, defina un middleware que llame al método onceBasic
:
public function handle($request, Closure $next){ return Auth::onceBasic() ?: $next($request);}
Si está utilizando PHP FastCGI, la autenticación básica HTTP puede no funcionar correctamente de inmediato. Las siguientes líneas deben agregarse a su archivo .htaccess
:
RewriteCond %{HTTP:Authorization} ^(.+)$RewriteRule .* -
Recordatorios de contraseñas & Restablecer
Modelo & Tabla
La mayoría de las aplicaciones web proporcionan una forma para que los usuarios restablezcan sus contraseñas olvidadas. En lugar de forzarlo a volver a implementar esto en cada aplicación, Laravel proporciona métodos convenientes para enviar recordatorios de contraseñas y realizar restablecimientos de contraseñas.
Para comenzar, verifique que su modelo User
implemente el contrato Illuminate\Contracts\Auth\CanResetPassword
. Por supuesto, el modelo User
incluido con el framework ya implementa esta interfaz, y utiliza el rasgo Illuminate\Auth\Passwords\CanResetPassword
para incluir los métodos necesarios para implementar la interfaz.
Generar la Migración de la Tabla de recordatorio
A continuación, se debe crear una tabla para almacenar los tokens de restablecimiento de contraseña. La migración para esta tabla se incluye con Laravel desde el primer momento y reside en el directorio database/migrations
. Así que todo lo que necesitas hacer es migrar:
php artisan migrate
Controlador de recordatorio de contraseña
Laravel también incluye un Auth\PasswordController
que contiene la lógica necesaria para restablecer las contraseñas de usuario. Hemos proporcionado vistas a empezar! Las vistas se encuentran en el directorio resources/views/auth
. Usted es libre de modificar estas vistas como desee para adaptarse al diseño de su propia aplicación.
Su usuario recibirá un correo electrónico con un enlace que apunta al método getReset
de PasswordController
. Este método renderizará el formulario de restablecimiento de contraseña y permitirá a los usuarios restablecer sus contraseñas. Después de restablecer la contraseña, el usuario iniciará sesión automáticamente en la aplicación y será redirigido a /home
. Puede personalizar la ubicación de redirección posterior al restablecimiento definiendo una propiedad redirectTo
en PasswordController
:
protected $redirectTo = '/dashboard';
Nota: De forma predeterminada, los tokens de restablecimiento de contraseña caducan después de una hora. Puede cambiar esto a través de la opción
reminder.expire
en su archivoconfig/auth.php
.
Autenticación social
Además de la autenticación típica basada en formularios, Laravel también proporciona una forma sencilla y conveniente de autenticarse con proveedores de OAuth utilizando Laravel Socialite. Socialite actualmente admite la autenticación con Facebook, Twitter, Google, GitHub y Bitbucket.
Para comenzar con Socialite, incluya el paquete en su archivo composer.json
:
"laravel/socialite": "~2.0"
A continuación, registre el Laravel\Socialite\SocialiteServiceProvider
en su archivo de configuración config/app.php
. También puede registrar una fachada:
'Socialize' => 'Laravel\Socialite\Facades\Socialite',
Necesitará agregar credenciales para los servicios de OAuth que utiliza su aplicación. Estas credenciales deben colocarse en su archivo de configuración config/services.php
y deben usar la clave facebook
, twitter
, google
, o github
, dependiendo de los proveedores que requiera su solicitud. Por ejemplo:
'github' => ,
A continuación, ¡está listo para autenticar usuarios! Necesitará dos rutas: uno para redirigir al usuario al proveedor OAuth y otro para recibir la devolución de llamada del proveedor después de la autenticación. Aquí hay un ejemplo usando el Socialize
facade:
El método redirect
se encarga de enviar al usuario al proveedor OAuth, mientras que el método user
leerá la solicitud entrante y recuperará la información del usuario del proveedor. Antes de redirigir al usuario, también puede establecer «ámbitos» en la solicitud:
return Socialize::with('github')->scopes()->redirect();
Una vez que tenga una instancia de usuario, puede obtener algunos detalles más sobre el usuario: