簡體   English   中英

Laravel-哈希器/重置密碼問題

[英]Laravel - Hasher / Reset password issue

我已將重置密碼問題追溯到DatabaseTokenRepository中的hasher方法。

當它比較兩個令牌散列(一個是從用戶的重置請求中獲得一個,另一個是從數據庫中獲得)時,無論如何都會失敗。 我已經嘗試過從數據庫中簡單地復制粘貼並以這種方式比較兩個字符串,但是它仍然返回false。

我正在使用Laravel 5.4

用戶令牌 (來自重置電子郵件)

"$2y$10$xAnDTr6/G41sAROp4h76hOhx7c4Ily4eYBtFc1J4voCgwIRhq9Mge"

數據庫令牌

"$2y$10$xAnDTr6/G41sAROp4h76hOhx7c4Ily4eYBtFc1J4voCgwIRhq9Mge"

hasher函數的返回仍然為false

來自DatabaseTokenRepository的代碼

public function exists(CanResetPasswordContract $user, $token)
{
    $record = (array) $this->getTable()->where(
        'email', $user->getEmailForPasswordReset()
    )->first();

    //dump($token);
    //dump($record['token']);
    //dd($this->hasher->check($token, $record['token']));

    return $record &&
           ! $this->tokenExpired($record['created_at']) &&
             $this->hasher->check($token, $record['token']);
}

編輯:使用hash_equals($token, $record['token']); 返回true,但是這不是解決方案(因為這是源文件,對這些文件的更新將破壞我的功能)

我搞砸了,而不是使用預期的hash_hmac哈希,而是使用了數據庫中被哈希兩次的哈希-這導致每次失敗,因為password_verify函數需要值而不是哈希。

對於有相同問題的任何人,我建議您研究一下您正在向用戶發送電子郵件的內容,這是我從數據庫中獲取令牌而不是將其傳遞給控制器​​而搞砸的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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