繁体   English   中英

自定义 Laravel 身份验证中间件

[英]Customise Laravel auth middleware

在我的users表中,我有一个对应于用户权限的列rank 如果rank > 0 ,则用户可以登录并继续,因为rank0表示他们(暂时)被阻止或不活动。 所以我需要的是自定义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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM