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, email no es una opción obligatoria, simplemente se usa como ejemplo. Debe usar el nombre de columna que corresponda a un» nombre de usuario » en su base de datos.

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 archivo config/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:

Recuperar detalles de usuario