Ayuda con Login en Otra Tabla Laravel [SOLUCIONADO]

Laravel es un ampliamente reconocido framework PHP que a menudo se usa para construir aplicaciones web. Una de las cuestiones que suelen plantear los programadores es cómo gestionar el inicio de sesión utilizando una tabla diferente a la predeterminada.

Propósito de las tablas de autenticación en Laravel

Primero, es importante entender por qué un programador querría usar una tabla diferente para la autentificación en Laravel. La autentificación de la aplicación es una funcionalidad que permite a los usuarios acceder a áreas específicas de la aplicación a través del inicio de sesión. Laravel proporciona una forma muy sencilla de implementar estas funcionalidades mediante el uso de su proveedor de autentificación. Sin embargo, hay momentos en los que podríamos querer usar una tabla diferente para la autentificación, por ejemplo, cuando queremos que los administradores y los usuarios regulares inicien sesión desde diferentes tablas.

Implementación de Laravel para el manejo de sesiones

Laravel maneja el inicio de sesión y las sesiones de una manera particular. Primero, el proceso de inicio de sesión verifica las credenciales del usuario. Nosotros decidimos qué tabla de la base de datos verificar. Laravel obtiene los detalles del usuario de la tabla correcta y luego guarda el ID del usuario en una sesión.

Definición de proveedores y guardias

Los proveedores y los guardias son conceptos fundamentales en el proceso de inicio de sesión de Laravel. Los proveedores definen cómo los usuarios son recuperados de la base de datos, mientras que los guardias definen cómo se manejan y se almacenan las solicitudes autenticadas. Cuando quieras autenticar desde otra tabla, tendrás que especificar un proveedor de usuarios personalizado.

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => AppUser::class,
        ],

        'admins' => [
            'driver' => 'eloquent',
            'model' => AppAdmin::class,
        ],
    ],


Cómo iniciar sesión desde una tabla diferente en Laravel

Para permitir el inicio de sesión desde otra tabla en Laravel, necesitamos configurar un nuevo guardia y un nuevo proveedor en nuestro archivo de configuración de autentificación: config/auth.php.

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
    ],

En este caso, hemos añadido un nuevo guardia, ‘admin’, y está utilizando un proveedor de usuarios personalizado. Cuando tratemos de autenticarnos como administrador, Laravel mirará la configuración de este guardia y obtendrá los usuarios de la tabla de administradores en lugar de la tabla predeterminada de usuarios.

    if(Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password])){
        return redirect()->intended('dashboard');
    }
    else{
        return redirect()->back()->with('error','Las credenciales introducidas son incorrectas.');
    }

El método attempt() recibe un array como parámetro y verifica si el correo electrónico y la contraseña son correctos. Si las credenciales son correctas, redirige al usuario al ‘dashboard’. Si no, regresa a la página anterior con un mensaje de error.

Solución completa para autenticar desde otra tabla en Laravel

Para autenticar a los usuarios desde otra tabla, tendrás que seguir los pasos mencionados anteriormente y configurar correctamente los guardias y los proveedores. Una vez hecho esto, serás capaz de autenticar a los usuarios a través de cualquier tabla en tu base de datos Laravel.

    // Controllador de autenticación
    public function login(Request $request)
    {
        $credentials = $request->only('email', 'password');

        if (Auth::guard('admin')->attempt($credentials) {
            // Autenticación exitosa
            return redirect()->intended('dashboard');
        } else {
            // Autenticación fallida
            return back()->with('error', 'Oops! Las credenciais son incorrectas.');
        }
    }


Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad