问题描述:效能评议系统,后台管理员和前台评价用户在两个模型中,Administrator和 User ,无法实现两种角色同时在一台设备上登录。
解决方案:配置多个门卫去认证
1.修改配置 auth.php
认证是由 guard 和 provider 两部分构成的(参考用户认证文档),defaults 配置是选择哪一个 guard 认证驱动,所以我们在这两个配置项中分别添加一个 admin 和 admin 选项。
例如:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admin',
]
],
1
2
3
4
5
6
7
8
9
10
'guards'=>[
'web'=>[
'driver'=>'session',
'provider'=>'users',
],
'admin'=>[
'driver'=>'session',
'provider'=>'admin',
]
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Entities\User::class,
],
'admin' => [
'driver' => 'eloquent',
'model' => App\Entities\Administrator::class,
],
]
1
2
3
4
5
6
7
8
9
10
11
'providers'=>[
'users'=>[
'driver'=>'eloquent',
'model'=>App\Entities\User::class,
],
'admin'=>[
'driver'=>'eloquent',
'model'=>App\Entities\Administrator::class,
],
]
2.准备两个用户模型 User 和 Administrator
3.需要登录的路由中添加middleware,auth时,在带上对应的guard
前台的路由定义中 添加 auth:web 中间件
后台的路由定义中 添加 auth:admin 中间件 (若您登录后需要转向不同的地址,需要另外中间件)
4.配置不同的登录controller 复制laravel的 用户认证的controller,uses AuthenticatesUsers
针对不同的用户模型,修改对应 guard、username、loginview 、redirectTo等复合你需要的部分。
例如:
public function username()
{
return 'username';
}
protected $redirectTo = '/admin';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest:admin', ['except' => 'logout']);
}
protected function guard()
{
return auth()->guard('admin');
}
public function showLoginForm()
{
return view('admin.auth.login');
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
publicfunctionusername()
{
return'username';
}
protected$redirectTo='/admin';
/**
* Create a new controller instance.
*
* @return void
*/
publicfunction__construct()
{
$this->middleware('guest:admin',['except'=>'logout']);
}
protectedfunctionguard()
{
returnauth()->guard('admin');
}
publicfunctionshowLoginForm()
{
returnview('admin.auth.login');
}
5.在controller或者service中要认证或者获取不同的用户模型时 加上guard 的对应参数 ,不传是默认是web
Auth::guard('admin')->user();
Auth::guard()->user();
1
2
Auth::guard('admin')->user();
Auth::guard()->user();
本文由
施, 晓燕创作,除注明转载/出处外,均为本站原创,转载前请务必署名
最后编辑时间为: 2019-07-27 11:57 星期六