Cakephp&用户邮箱确认

时间:2014-09-21 12:32:42

标签: cakephp

我是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();

}
你能帮帮我吗?谢谢你们!

1 个答案:

答案 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 ,它支持电子邮件验证,并且开箱即用。