我有這個自定義函式,試圖在Laravel 8中登錄
protected function attemptLogin(Request $request)
{
$credentials = $this-> credentials($request)。
$credentials['estado'/span>]=1。
return $this->guard()-> attempt(
$credentials, $request->fill('remember')
);
}
當$credentials['estado']也有2的值時,我怎樣才能使接受登錄的嘗試。
我不知道如何讓它接受多個值。
我設法使自定義函式接受1的值,但不知道如何使它接受多個$credentials['estado']值。
uj5u.com熱心網友回復:
你不需要改變 attemptLogin() 方法中的任何內容,相反,你可以像這樣定制 LoginController 中的 crededentials() 方法:
//登錄,如果用戶在陣列中擁有如下描述的資料<
protected function credentials(Request $request)
{
$username = $this-> username();
return [
$username => $request->get($username)。
'password' => $request->get('password')。
'estado' => [1, 2 ], // OR condition
];
}
評論的答案:
說實話,在我的經驗中,我沒有遇到這種情況,但如果你想在登錄失敗時重定向到另一個視圖(針對特定欄位 "estado"),你可以定制 "sendFailedLoginResponse "方法,并添加一些額外的if條件來檢查 "estado"。 由于 "sendFailedLoginResponse "方法將只為獲得失敗的登錄回應實體而被呼叫,那么你可以檢查:失敗實際上來自'estado'欄位。像這樣:
protected function sendFailedLoginResponse(Request $request)
{
//custom case, when login failed and estado is 2.
if ($request->get('estado') == 2) {
return view('some.specific.view') 。
}
// laravel默認實作。
else {
throw ValidationException::withMessages([
$this->username() => [trans('auth.failed')]。
]);
}
}
記住,在這種情況下(當我們將用戶重定向到某個頁面時),我們實際上不是像以往那樣重定向,而是只是回傳一個視圖。我們這樣做是因為我認為你不想讓用戶隨時打開那個特定的視圖頁面,因為你需要讓他們只在特定情況下看到那個頁面。但是當你做實際的重定向時,你會讓用戶用一些靜態的URL訪問該頁面。 當然,你可以做一些額外的事情(在資料庫或會話中添加一些東西,并檢查請求是否來自'estado'失敗,而不是來自任何用戶),但這可能是一個頭疼的問題,在我看來,這不會是一個真正的laravel專用代碼。
不管怎樣,這就是我們的策略。我不認為這是強制性的,但這可以使你的作業變得簡單和安全。
注意:我已經從 "AuthenticatesUsers "特性中得到了這個故障實作(使用use IlluminateFoundationAuthAuthenticatesUsers;)。在任何時候,你都可以從那里獲得一些可用的方法,并在你的LoginController中覆寫它們,因為LoginController使用了這個特性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/315496.html
標籤:
上一篇:Flask何時存盤用戶的認證?
