2012-01-05 137 views
2

我想在CakePHP中爲我的網站編寫密碼重置功能。我試過使用$auth->hashPasswords,$auth->password,甚至Security::hash,但沒有正確的散列它。我試着用foobar的登錄,並指出用來嘗試登錄哈希:cfb9fabf02497f9090cbba6b03da4764212cea407cakephp不哈希密碼相同

但復位使foobar的散列到5f4bb4b693725cea09cc7fc20603273f665534d8

我在做什麼錯?

我的代碼:

$this->data['Player']['password'] = $this->Auth->password($this->data['Player']['password']); 
$this->Player->save($this->data); 
+0

我不是一個cakephp用戶,但它聽起來像是使用內部鹽來散列密碼,這將徹底改變散列。 – Crontab 2012-01-05 20:46:41

+1

我相信它會自動散列稱爲'密碼'的字段 - 所以如果你再次散列它,那就會搞砸了。 – Dave 2012-01-05 20:51:00

+0

所以你說一個使用鹽而另一個不是?我檢查了內部代碼,他們看起來像他們應該使用它,但我怎麼能確定? – LordZardeck 2012-01-05 20:51:10

回答

5

問題是,如果你有一個「用戶名」和「密碼」字段(CakePHP的1.3或之前),稱爲場「密碼」被自動散列。所以當你手動完成時,你實際上會哈希兩次。

您可以將其重命名爲其他類似「password1」,「mypass」,「toiletpaper」等的東西,這樣可以避免它被自動散列,或者您可以刪除額外的散列。

+1

這是什麼工作。它最初並不適合我的原因是我沒有用戶名。只有在提供了用戶名和密碼的情況下,自動哈希纔會生效。我只是提供密碼。 – LordZardeck 2012-01-05 21:00:03

+1

作爲未來用戶的興趣點,這適用於蛋糕1.3(可能是舊版本)。在** 2.0 **中自動密碼散列否[適用於](http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#hashing-passwords)。 – Ross 2012-01-06 10:14:28

+0

人們還應該注意到,他已經覆蓋了很多以前的問題 - 只能鏈接一個:http://stackoverflow.com/questions/7857168/password-does-not-hash-in-cakephp – mark 2012-01-06 11:29:49