[英]Customise Laravel auth middleware
在我的users
表中,我有一个对应于用户权限的列rank
。 如果rank > 0
,则用户可以登录并继续,因为rank
为0
表示他们(暂时)被阻止或不活动。 所以我需要的是自定义auth
中间件,所以只有 rank > 0
才会被认证。
我对它进行了一些研究,但没有找到确切地放置我的代码的位置。
编辑:我之前发现了如何手动验证具有附加要求(例如rank > 0
)的用户,但是,我使用的是 laravel 内置功能,因此没有太大帮助:
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// The user is active, not suspended, and exists.
}
(在这种情况下它是active
(来源:laravel 文档),但可以调整)。
你的app/http/middleware
叫做RedirectIfAuthenticated
您必须将其编辑为如下所示:
if (Auth::check() && Auth::user()->rank > 0) {
return $next($request);
}
return redirect('/home');
此外,如果您想像您写的那样手动验证用户,您可以检查用户对象上的等级和密码,然后使用
Auth::login($user)
Illuminate\\Foundation\\Auth\\AuthenticatesUsers
trait 中有一个credentials()
方法,您可以在app/Http/Controllers/Auth/LoginController.php
覆盖它。 因此,只需将其添加到您的 LoginController 中:
/**
* Get the needed authorization credentials from the request.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
protected function credentials(Request $request)
{
return [
'email' => $request->{$this->username()},
'password' => $request->password,
'active' => 1, // yep, not rank, read below
];
}
如果 rank 字段的值不同于 0 和 1,请勿将其用于此目的并添加活动字段。 否则,如果您阻止用户,这意味着您将 rank 字段设置为 0,那么当您取消阻止该用户时,您如何知道旧的 rank 是多少?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.