2012-01-05 138 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