Laravel:ADMIN和USER的安全性

时间:2017-07-20 10:16:55

标签: php laravel security authentication laravel-5.4

我有两种不同的用户和管理员登录表单。我想要的是用户只应该以自己的形式登录,否则应该是一个错误,对于管理表单也是如此。

我的数据库中只有1个用户和管理员表。它们只有user_type不同,显然是“admin”和“user”

我正在做的是当用户尝试以管理员登录表单登录时,它会显示一条信息,上面写着“抱歉,您不是此网站的管理员”。但这意味着用户仍然登录。

我想要的是当尝试以管理员身份登录时,我根本不希望它访问系统。

到目前为止我的代码:

public function validateLoginResort(Request $requests){
 $username = $requests->username;
 $password = $requests->password;

 $attempt = Auth::attempt([
 'email' => $requests->username,
 'password' => $requests->password,
  ]);

  if(Auth::check()){
    if(Auth::user()->type_user == 'admin'){

       return redirect('home');
     }
     else{
       Auth::logout();
       return redirect('login');
      }
   }else{
     return "Invalid input";
  }
}

如果用户不是管理员,我尝试使用Auth::logout,但我认为它不安全且完全正确。

我认为还有更好的方法可以做到这一点,你们可以就如何正确实施这一点提出建议吗?谢谢

2 个答案:

答案 0 :(得分:0)

您可以先检查用户类型,然后在他/她是管理员时登录用户。

假设您的用户表名称是"用户"和相应的雄辩模型是#34;用户"然后你可以这样做:

$user = User::where('email', $request->get('email'))->first();    
if (!$user || !\Hash::check($request['password'], $user->password)) {
    return 'Invalid user credential';
}

if ($user->type_user !== 'admin') {
    return 'Only admin allowed';
}

\Auth::login($user); // This is the key point.
return redirect('home');

答案 1 :(得分:0)

您正在努力在laravel中创建自定义代码,这是如何工作的。我建议您使用此处的laravel软件包:https://github.com/spatie/laravel-permission,该软件包可让您管理数据库中的用户权限和角色

谢谢