自定义Laravel auth中间件

时间:2017-07-01 18:23:02

标签: php laravel middleware

在我的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文档),但可以调整。)

2 个答案:

答案 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)