2017-07-01 113 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,那麼您在解鎖用戶時如何知道舊排名?