2015-10-31 59 views
3

在我播種機我已經散列我這樣的代碼:爲什麼播種機中的哈希方法與控制器中的哈希方法不同? Laravel 5.1

'validCode' => Hash::make('1110578abc') 

它給出了這樣的結果在數據庫:$ 2Y $ 10 $ GaKhhxrMNCnzr

當我散列相同通過在我的控制器中輸入代碼,它會給出一個不同的值,因爲Bcrypt添加了隨機鹽。

控制器:

dd(Hash::make(Input::get('code'))); 

(我在1110578abc鍵入此輸入字段。)

它給了我這個值:

$ 2Y $ 10 $ xxVU78CphJEGOOTT1teNY.LeLb7kBjDvP9Npbf1h4.T4HDtuIFD16

對於我的應用程序,我想c嘿,如果這兩個值匹配。 annyone知道我能做到嗎?

+0

的可能的複製[Laravel 4 - 散列相同的密碼給出不同的值](http://stackoverflow.com/questions/24381316/laravel-4-hashing-same-password-gives-different-values) – kotapeter

+0

在該交他們解釋了它爲什麼會發生變化,知道它是有用的。但是這仍然不能解決我的問題。如何檢查輸入中的代碼是否與我的數據庫中的散列代碼匹配(如果它們始終不同)? –

+0

我編輯了我的問題以說清楚。 –

回答

1

您可以使用Hash::check()方法。 check方法允許您驗證給定的純文本字符串對應於給定的散列。 嘗試:

if (Hash::check('plain-text', $hashedPassword)) { 
    // The passwords match... 
} 

You can read more about Laravel Hashing.

+1

我以前在laravel文檔中找到過這個,但是我注意到我以前用錯誤的方法使用了這個方法。如果(哈希::檢查(Input :: get('code'),'$ 2y $ 10 $ GaKhhxrMNCnzr')) { dd('match'); } else { dd('no match'); } –

0

具體代碼,回答我的帖子:

if (Hash::check(Input::get('code') , '$2y$10$GaKhhxrMNCnzr')) 
{ 
    dd('match'); 
} 
else 
{ 
    dd('no match'); 
} 

這解決了它,並返回 '匹配'。