【问题标题】:Laravel: Security For ADMIN and USERLaravel:管理员和用户的安全性
【发布时间】:2017-07-20 10:16:55
【问题描述】:

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

我的数据库中只有一个用户和管理员表。它们只是 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,但我认为它根本不安全和正确。

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

【问题讨论】:

  • 你应该在中间件中编写你的用户角色检查代码
  • 你能举个例子吗?
  • 您可以使用middlewares 或在Auth::attempt 之前先通过电子邮件查找用户,然后检查类型是否为“admin”,如果是这种情况,请使用attempt 然后check 否则重定向用户

标签: php laravel security authentication laravel-5.4


【解决方案1】:

你可以先检查用户类型,如果他/她是管理员,再登录用户。

假设你的用户表名是“users”,对应的 eloquent 模型是“User”,那么你可以这样做:

$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');

【讨论】:

    【解决方案2】:

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

    谢谢,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 2016-08-19
      相关资源
      最近更新 更多