tablas relacionadas obtener llaves llave guardar foraneas foranea diferentes datos crear consultas con clave php laravel authentication laravel-5.2

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í:

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.

  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


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 .