[英]Laravel 5.6 - Using built in Auth on custom table - Not authenticating user/password
我正在努力對已經包含用戶名和密碼的現有“用戶”表使用Laravel的內置身份驗證。 列名稱為“ UserEmail”和“ UserPassword”。 為了進行測試,我使用了修補匠創建了一個條目,將密碼散列為:
$user->UserPassword=Hash::make('1234');
嘗試使用Auth::attempt
登錄時,身份驗證始終失敗。 為了進行調試,我開始添加var_dump
,甚至對通過數據庫中哈希密碼匹配的密碼請求進行比較。 因此,我不確定Auth::attempt
為什么無法對其進行身份驗證:
這是我在LoginController.php中擁有的功能:
public function login(Request $request)
{
// validate the form data
$this->validate($request, [
'UserEmail' => 'required',
'UserPassword' => 'required'
]);
var_dump($request->UserEmail);
var_dump($request->UserPassword);
$user = App\FarmUser::where('UserEmail', $request->UserEmail)->first();
var_dump($user->UserPassword);
$authenticated = Hash::check($request->UserPassword, $user->UserPassword);
var_dump($authenticated);
// attempt to log the user in
if (Auth::attempt(['UserEmail' => $request->UserEmail, 'UserPassword' => $request->UserPassword], $request->remember)) {
// if successful, then redirect to their intended location
Debugbar::addMessage('successfully authenticated');
return redirect()->intended($redirectTo);
}
// if unsuccessful, then redirect back to login with the form data
Debugbar::addMessage('authentication failed');
//return redirect()->back();
}
當我嘗試登錄時,看到正確的UserEmail,UserPassword,並且哈希檢查也返回true。 但是,當我調用Auth::attempt
,它無法成功進行身份驗證並重定向回去。 知道為什么我無法獲得Auth::attempt
正確進行身份驗證嗎?
當我登錄時,這是從這些var轉儲生成的輸出:
string(20) "user@test.com" string(8) "1234" string(60) "<hash>" bool(true)
這是此App \\ FarmUser模型的修補匠返回的內容:
>>> $user = App\FarmUser::where('UserLogin', 'testuser')->first();
=> App\FarmUser {#809
ID: 1,
UserLogin: "testuser",
password: "<hash>",
Active: "Yes",
UserEmail: "user@test.com",
Created: "2018-03-20 15:09:24",
CreatedByID: null,
Modified: null,
ModifiedByID: null,
created_at: "2018-03-20 19:09:09",
updated_at: "2018-03-20 19:09:09",
}
您將需要在用戶模型中覆蓋getAuthPassword()
方法,如下所示:
/**
* Get the password for the user.
*
* @return string
*/
public function getAuthPassword()
{
return $this->UserPassword;
}
並且不要在Auth::attempt()
調用UserPassword
,而是將其稱為password
。 像這樣:
Auth::attempt([
'UserEmail' => $request->UserEmail,
'password' => $request->UserPassword
]);
這是因為Laravel無法識別哪個字段應該是password
字段,並為其具有“保留”字詞“ password”(它將對該字段執行哈希操作,但不會對其他字段執行哈希操作)。
編輯:
由於您的模型實際上是\\App\\FarmUser
,因此您還需要在config/auth.php
文件中對其進行更改,如下所示:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\FarmUser::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.