簡體   English   中英

Laravel 5.6-在自定義表上使用內置的Auth-不對用戶/密碼進行身份驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM