Autentique a los usuarios de más de dos tablas en laravel 5

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 …?

Primero crea Admin Authenticatable en Illuminate\Foundation\Auth like

   

Luego cree el Modelo de Administración extendiendo el Modelo de Administración Authenticatable :

   

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'; } 

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 aquí .

Prueba mi idea si quieres. Estoy esperando que diferentes table tengan diferentes users . Porque no funcionará si tienes el mismo user en otras tablas.

  1. Elija su tabla de prioridades (por ejemplo, usuarios)
  2. 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:

https://laracasts.com/discuss/channels/general-discussion/using-laravel-auth-for-multiple-tables?page=1

¿Alguien puede explicar Laravel 5.2 Multi Auth con ejemplo?

https://laracasts.com/discuss/channels/laravel/52-auth-multiple-tables?page=1

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();