Cakephp&;用户电子邮件确认

Cakephp&;用户电子邮件确认,cakephp,Cakephp,我是php和cakephp新手,我一直在学习cakephp()中的简单身份验证和授权应用程序教程。一切似乎都运转良好 我正在添加电子邮件确认,以在用户订阅时激活帐户。在本教程中,密码使用blowfishpassword哈希程序。我用它作为确认链接中的标记 但我似乎无法将链接令牌与数据库中的密码进行比较 $passwordHasher = new BlowfishPasswordHasher(); $motdepasse = $this->data['Utilisat

我是php和cakephp新手,我一直在学习cakephp()中的简单身份验证和授权应用程序教程。一切似乎都运转良好

我正在添加电子邮件确认,以在用户订阅时激活帐户。在本教程中,密码使用blowfishpassword哈希程序。我用它作为确认链接中的标记

但我似乎无法将链接令牌与数据库中的密码进行比较

$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();

}

你能帮我吗?谢谢大家

首先,您不应该发送密码散列,无论散列有多安全,都应该单独生成确认令牌!只需将其存储在额外的列或单独的表中即可

也就是说,在
activate()
方法中,您再次对哈希进行散列,如果实际生成哈希,则会导致比较失败。但是,脚本不会生成哈希,因为您使用的salt值无效,这将导致以下警告:

无效盐:使用河豚盐。请访问并阅读建造河豚盐的相关章节

Security::hash()
将返回一个空字符串。如果你没有收到这样的信息,那么你需要

我建议在您尝试实现与安全相关的功能之前,首先要熟悉PHP、CakePHP、哈希等


您可能想签出,它支持电子邮件验证和更多的开箱即用功能。

Wince如果您手动执行此操作,您是否可以检查每一个的哈希版本,并查看它们是否确实不同?@PatriceB可能还想作为一种轻量级方法来阅读。