在我的users
表格中,我有一列rank
,对应于用户的权限。如果rank > 0
,则用户可以登录并继续,因为0
中的rank
表示他们(暂时)被阻止或处于非活动状态。所以我需要的是自定义auth
中间件,以便只对排名> 0
进行身份验证。
我做了一些研究,但没有找到准确放置代码的地方。
编辑:我之前发现如何手动验证具有其他要求的用户(例如rank > 0
),但是,我正在使用laravels内置功能,因此无济于事:
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// The user is active, not suspended, and exists.
}
(在这种情况下是active
(来源:laravel文档),但可以调整。)
答案 0 :(得分:1)
credentials()
特征中有一个Illuminate\Foundation\Auth\AuthenticatesUsers
方法,您可以在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
];
}
如果排名字段的值不同于0和1,请不要将其用于此目的并添加活动字段。否则,如果您阻止用户,这意味着您将等级字段设置为0,当您取消阻止用户时,您如何知道旧等级是什么?
答案 1 :(得分:0)
app/http/middleware
中有RedirectIfAuthenticated
您必须将其编辑为以下内容:
if (Auth::check() && Auth::user()->rank > 0) {
return $next($request);
}
return redirect('/home');
此外,如果您想像您所写的那样手动验证用户,您可以检查用户对象上的排名和密码,然后只需使用
Auth::login($user)