2017-01-26 97 views
0

我想爲Laravel 5.3應用程序設置Doctrine 2身份驗證。我使用Laravel生成的Auth控制器,所以它不是我自己的自定義實現。我做了一些小的修改(即使用Doctrine將用戶持久保存到數據庫中)並且註冊工作正常,但是當我嘗試登錄時,它會使驗證失敗。Laravel身份驗證hasValidCredentials失敗

我已經與調試器階梯通過與它似乎是一致失敗的功能hasValidCredentials(位於供應商/ laravel /框架/ SRC /照亮/認證/ SessionGuard.php)詳述如下:

/** 
    * Check the given plain value against a hash. 
    * 
    * @param string $value 
    * @param string $hashedValue 
    * @param array $options 
    * @return bool 
    */ 
    public function check($value, $hashedValue, array $options = []) 
    { 
     if (strlen($hashedValue) === 0) { 
      return false; 
     } 

     return password_verify($value, $hashedValue); 
    } 

作爲參考,是我對$值和$ HASHEDVALUE值如下:

$值= 「測試器」;
$ HASHEDVALUE = 「$ 2Y $ 10 $ ZSLRE3LAVA8myaH8mu6TNeumQxHdmKRbv/zZdFQeDujZ8JolshTOu」;

變量的屏幕截圖按我的最後XDebug的會議顯示了這些變量的確切類型:

credential values

的$ HASHEDVALUE是加密版本(使用bcrypt)的密碼「測試儀「所以我知道憑據是100%正確的,但是當執行命中password_verify時,它總是計算爲false,然後hasValidCredentials檢查失敗。

我存儲我的用戶在我的數據庫如下: user table setup

所以我知道哈希密碼是足夠長的時間,並存儲在數據庫中。我發現$ hashedValue返回雙引號,這可能是一個問題嗎?

不管我無法登錄的會話衛隊類的嘗試函數總是失敗的hasValidCredentials始終返回false,我很難倒作爲憑證是準確的。

想知道是否有人有任何想法,如何解決這個問題?

感謝

+1

看來,下面的計算結果爲true: 'password_verify( '祕密密碼', '$ 2Y $ 10 $ EnIi90KP.0BqCVJgK21BrO3xzArxCZaiAPaUebCw.K2Xw71QOCZv2');' – liamjnorman

+0

請注意,我的應用程序的關鍵是base64編碼。這可能會導致生成散列時出現問題嗎? – liamjnorman

回答

1

password_verify PHP原生功能,password_hash基本對應。因爲

password_verify('tester', '$2y$10$ZSLRE3LAVA8myaH8mu6TNeumQxHdmKRbv/zZdFQeDujZ8JolshTOu'); 

回報false,你$hashedValuetester加密值。

我的猜測是,你不知何故雙重加密的密碼,例如你的laravel組件和你的教義組件都是哈希密碼值。

請注意,laravel的app.key不用於加密密碼,因爲您可以在BcryptHasher中看到,因此它不會影響結果。

+1

感謝passioncoder。在Laravel已經在輸入上運行Hash :: make之後,我正在運行它。 – liamjnorman