我是php和cakephp的新手,我正在关注cakephp(http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html)的简单身份验证和授权应用程序教程。一切似乎都很好。
我在用户订阅时添加电子邮件确认以激活帐户。在教程中,密码使用的是blowfishpassword hasher。我正在使用它作为确认链接中的标记。
但我似乎无法将链接令牌与数据库中的密码进行比较......
$passwordHasher = new BlowfishPasswordHasher();
$motdepasse = $this->data['Utilisateur']['mot_passe'] = $passwordHasher->hash(
$this->data['Utilisateur']['mot_passe']
);
$link = array('controller'=>'utilisateurs','action'=>'activate',$this->Utilisateur->id
.'-'. $motdepasse);
public function activate($token) {
$token = explode('-',$token);
$user = $this->Utilisateur->find('first',array(
'conditions' => array('id' => $token[0],'Utilisateur.mot_passe' => Security::hash($token[1], 'blowfish', 'Utilisateur.mot_passe'))
));
debug($user);
debug($token[1]);
die();
}
你能帮帮我吗?谢谢你们!
答案 0 :(得分:1)
首先,你不应该发送密码哈希,无论哈希可能有多安全,确认令牌应该单独生成!只需将其存储在一个额外的列或单独的表中。
话虽如此,在您的activate()
方法中,您再次哈希哈希,如果实际生成哈希,将导致比较失败。但是,脚本不会生成散列,因为您使用的无效salt值会导致以下警告:
无效的盐:有关河豚的Utilisateur.mot_passe请访问http://www.php.net/crypt并阅读有关建造河豚盐的相应部分。
和Security::hash()
将返回一个空字符串。如果您没有收到此类消息,则需要enable the debug mode。
我建议您在尝试实现与安全相关的功能之前先熟悉PHP,CakePHP,哈希和东西!
您可能需要查看 https://github.com/CakeDC/users ,它支持电子邮件验证,并且开箱即用。