2017-07-01 110 views
1

在我的users表中,我有一列rank,它对应于用户的权限。如果rank > 0,用户可以登录并继续,因为rank中的0表示它们(暂时)被阻止或不活动。所以我需要的是定制auth中间件,所以只有排名> 0将被认证。自定义Laravel认证中间件

我做了一些研究,但没有找到准确放置我的代码的位置。

编辑:我刚才发现如何手动验证拥有额外的要求用户(例如rank > 0),但是,我使用laravels内置功能,让没有太大的帮助:

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) { 
    // The user is active, not suspended, and exists. 
} 

(这里是active(来源:laravel文档),但可以调整)。

+0

非常感谢您在没有正确解释的情况下投票。谢谢,我从中学到了很多! –

回答

0

有中间件在app/http/middleware称为RedirectIfAuthenticated

你必须把它编辑成类似这样:

if (Auth::check() && Auth::user()->rank > 0) { 
       return $next($request); 
     } 
return redirect('/home'); 

此外,如果你想要一个像你写手动验证用户,您可以检查是否用户对象上的等级和密码,然后只使用

Auth::login($user) 
+0

感谢您的回答。然而,我的'RedirectIfAuthenticated'看起来如果(Auth :: guard($ guard) - > check())返回重定向('/ dashboard'); }'所以我想知道你的解决方案的工作原理。它是否适用于每一页? –

+0

那么,如果用户通过身份验证,它会继续请求,如果它不会被重定向到/ home @FelixBlome –

1

在中有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 
    ]; 
} 

如果等级字段具有比0和1不同的价值观,不要使用它用于此目的,并添加一个活跃的领域。否则,如果您阻止了用户,这意味着您将排名字段设置为0,那么您在解锁用户时如何知道旧排名?