3 回答

TA贡献1848条经验 获得超10个赞
这对我有用。
public function attemptLogin(Request $request)
{
$this->guard()->attempt(
$this->credentials($request), $request->filled('remember')
);
$user = $this->guard()->user();
$admin = $user->hasRole('admin');
if($admin){
return true;
}
else{
$this->guard()->logout();
return false;
}
}

TA贡献1843条经验 获得超7个赞
最简单的方法是在config/auth.php.
'guards' => [
'web' => [ // default guard
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
'admin' => [
'driver' => 'session',
'provider' => 'admin',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admin' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
]
],
App/Admin.php 类是您的管理 eloquent 类, App/User.php 是您的用户 eloquent 类。这种方式假设管理员和用户在数据库中获得了单独的表。当然,您还应该通过以下两种方式之一在 AdminLoginController 中使用管理员防护:
放protected $guard = 'admin';
放public function guard(){
Auth::guard('admin');
}

TA贡献1802条经验 获得超10个赞
您可以在管理员的登录操作中进行检查,如下所示,我正在共享我在我的一个项目中使用的代码。希望你能理解,我也添加了评论
public function login(Request $request){
if(auth()->user()){
$user = auth()->user()->toArray();
$role = Role::where('_id', new \MongoDB\BSON\ObjectID($user["role_id"]))->first();
if($role) $role = $role->toArray();
if(!empty($role)){
// Prevent other users to enter admin area by checking the role
if(strtolower($role['name']) != 'admin'){
Auth::logout();
\Session::flash('errors', 'You are not authorized to access admin area.' );
return redirect(url('/admin/login'));
}else{
return redirect(url('/admin'));
}
}else{
Auth::logout();
\Session::flash('errors', 'Invalid user role' );
return redirect(url('/admin/login'));
}
}
return view('admin/index/login');
}
如果管理员以外的任何用户尝试登录管理区域,通过检查角色强制他们注销系统
- 3 回答
- 0 关注
- 102 浏览
添加回答
举报