在让用户验证电子邮件时,CakePHP会更改Blowfish密码吗?

时间:2014-04-16 10:18:48

标签: cakephp passwords blowfish

我已经使用Blowfish加密关于散列密码的CakePHP书籍,这没有任何问题。

我现在已按照本指南http://www.nikatrex.com/blog/?p=300进行操作,以了解如何验证我的用户电子邮件帐户。这是有效的,我构建的电子邮件带有指向我网站路径的链接,然后在URL字符串中获取电子邮件,获取保存在我的数据库中的令牌,如果正确,则设置我的activeverify数据库字段为真!

但是,它似乎也改变了我保存的Blowfish密码,每次测试链接时,CakePHP似乎都会在用户密码字段中写入一个新的Blowfish哈希值。

我知道Blowfish的盐是在运行时生成的,因此即使用户输入的密码相同,它也会保存不同的哈希密码。这不是我的问题,当我验证用户的电子邮件时,它重新保存了密码,即使知道我告诉它。

所以这是我的用户模型Blowfish的密码,

  public function beforeSave($options = array()) {
      if (isset($this->data[$this->alias]['password'])) {
        $this->data[$this->alias]['password'] = Security::hash($this->data[$this->alias]['password'],'blowfish');
      }
      return true;
  } //End of BeforeSave

我已经构建了(这是一个临时的,快速的方法,现在发送电子邮件,因为由于某种原因CakePHP电子邮件不适合我,但我认为这是我的LAMP堆栈配置/ gmail设置)一个简单的邮件对于PHP代码,这是将链接发送给我的用户的行

  $message .= '<a href="verifymyuser/t:'.$hash.'/n:'.$this->data['User']['email'].'">CLICK HERE</a>';

这是我在用户点击链接时加载的功能

public function VerifyMe() {    
    if (!empty($this->passedArgs['n']) && !empty($this->passedArgs['t'])){
        $SentEmail = $this->passedArgs['n'];
        $SentToken = $this->passedArgs['t'];

        $GetUserToVerify = $this->User->findByEmail($SentEmail);

        if ($GetUserToVerify['User']['active'] == 0){
            if($GetUserToVerify['User']['token'] == $SentToken) {
                $GetUserToVerify['User']['active'] = true;
                $GetUserToVerify['User']['token'] = NULL;
                $GetUserToVerify['User']['verified'] = true;
                $this->User->save($GetUserToVerify);
                $this->Session->setFlash('Thank You, your email has been verified successfully, enjoy', 'GoodFlashMsg', array(), 'Good');
                $this->redirect('/login');  
                exit();         
            } 
        }  else {
            $this->Session->setFlash('You are already verified', 'BadFlashMsg', array(), 'Bad');
            $this->redirect('/');   
        } 
    } 
} 

我正在设置一个活跃的; &#39;验证&#39;标记到数据库中,如果以后我想要取消激活用户我可以。我也在擦&&#39;令牌&#39;如果用户更改了他们的电子邮件地址,那么我可以设置一个新令牌,我只想确保它是一个新令牌!

我确信它已经完成了我的模型,但我看不出它有什么问题,它有一个if检查密码字段的isset,它不是吗?除非我不了解数据的移动方式?

感谢。

1 个答案:

答案 0 :(得分:1)

实际上,这些信息很难找到正在发生的事情。 试试这个,希望这会暂时解决你的问题......

$this->User->save($GetUserToVerify, array(
    'fieldList' = array('token','active','verified')));