php - relacionadas - Autentique a los usuarios de más de dos tablas en laravel 5
llave foranea laravel (4)
Esta pregunta ya tiene una respuesta aquí:
- ¿Alguien puede explicar Laravel 5.2 Multi Auth con respuestas de Ejemplo 3?
Como sé, Auth::attempt
se usa para autenticar usuarios de la tabla de users
, pero quiero autenticar a otros usuarios desde la tabla de administradores y desde la tabla de admins
. Sé que hay laravel-multiauth
plugin ya existe. Pero, ¿podemos crear nuestro propio AuthServiceProvider
para autenticar usuarios de varias tablas ...?
Crear un modelo para la tabla de administradores y la tabla de administradores. Este modelo debe extender Illuminate/Foundation/Auth/User
En config/auth.php
,
Agregar a la matriz de proveedores:
''managers'' => [
''driver'' => ''eloquent'',
''model'' => App/Manager::class,
],
Añadir a la matriz de guardias:
''web_manager'' => [
''driver'' => ''session'',
''provider'' => ''managers'',
],
Entonces. en LoginController
(cree uno para el administrador usando php artisan make:auth
) use el rasgo Illuminate/Foundation/Auth/AuthenticatesUsers
y anule las propiedades de protección y redireccionamiento.
protected $redirectTo = ''redirect_path_after_manager_login'';
protected function guard()
{
return Auth::guard(''web_manager'');
}
El modelo del administrador está autenticado y puede obtener el objeto del administrador autenticado Auth::guard(''web_manager'')->user();
Primero crea Admin Authenticatable en Illuminate/Foundation/Auth
like
<?php
namespace Illuminate/Foundation/Auth;
use Illuminate/Auth/Authenticatable;
use Illuminate/Database/Eloquent/Model;
use Illuminate/Auth/Passwords/CanResetPassword;
use Illuminate/Foundation/Auth/Access/Authorizable;
use Illuminate/Contracts/Auth/Authenticatable as AuthenticatableContract;
use Illuminate/Contracts/Auth/Access/Authorizable as AuthorizableContract;
use Illuminate/Contracts/Auth/CanResetPassword as CanResetPasswordContract;
class Admin extends Model implements
AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract
{
use Authenticatable, Authorizable, CanResetPassword;
}
Luego cree el Modelo de Administración extendiendo el Modelo de Administración Authenticatable
:
<?php
namespace App;
use Illuminate/Foundation/Auth/Admin as Authenticatable;
class Admin extends Authenticatable
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
''name'', ''email'', ''password'',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
''password'', ''remember_token'',
];
}
Después de eso, necesita modificar config/auth.php
como a continuación Agregar en la matriz de proveedores
''admins'' => [
''driver'' => ''eloquent'',
''model'' => App/Admin::class,
],
y agregar en la matriz de guardias .
''user'' => [
''driver'' => ''session'',
''provider'' => ''users'',
],
''admin'' => [
''driver'' => ''session'',
''provider'' => ''admins'',
],
Ahora para autenticar desde la tabla de usuario
if (Auth::guard(''user'')->attempt([''email'' => $email, ''password'' => $password])) {
$details = Auth::guard(''user'')->user();
$user = $details[''original''];
return $user;
} else {
return ''auth fail'';
}
Y para autenticar desde la tabla Admin.
if (Auth::guard(''admin'')->attempt([''email'' => $email, ''password'' => $password])) {
$details = Auth::guard(''admin'')->user();
$user = $details[''original''];
return $user;
} else {
return ''auth fail'';
}
Prueba mi idea si quieres. Estoy esperando que diferentes table
tengan diferentes users
. Porque no funcionará si tienes el mismo user
en otras tablas.
- Elija su tabla de prioridades (por ejemplo, usuarios)
- Agregar la condicion
-
if(Auth::user(attempt(...))
-
elseif(Auth::manager(attempt(...))
-
elseif(Auth::admins(attempt(...)))
-
Nota: Su tabla de prioridad aquí son users
, luego, si el usuario no existe en esa tabla, probará la tabla de managers
, y si aún no existe, verificará la tabla de admins
; de lo contrario (use else
) devolverá un mensaje de error.
Otra opción:
Otra opción es usar este paquete sarav/laravel-multiauth
. Puedes seguir este hilo. Cómo utilizar la autenticación para varias tablas en Laravel 5 para obtener más información.
Más referencia:
¿Alguien puede explicar Laravel 5.2 Multi Auth con ejemplo?
https://laracasts.com/discuss/channels/laravel/52-auth-multiple-tables?page=1
Puede configurar varias protecciones de autenticación, cada una con un proveedor diferente. Los proveedores definen la tabla o modelo a utilizar.
En config/auth.php
, configura los providers
siguiente manera y también configura las guards
correspondientes para cada uno de esos proveedores:
''providers'' => [
''users'' => [
''driver'' => ''eloquent'',
''model'' => App/User::class,
],
''managers'' => [
''driver'' => ''eloquent'',
''model'' => App/Manager::class,
],
''admins'' => [
''driver'' => ''eloquent'',
''model'' => App/Admin::class,
]
]
Entonces puedes autenticarte así:
Auth::attempt($credentials) // use default guard for simple users
Auth::guard(''manager'')->attempt($credentials)
Auth::guard(''admin'')->attempt($credentials)
Echa un vistazo a los documentos here .