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



我已经学习了CakePHP关于使用Blowfish加密哈希密码的书,这很有效,没有任何问题。

我现在已经遵循了这个指南,http://www.nikatrex.com/blog/?p=300,以便查看如何验证我的用户电子邮件帐户。这是有效的,我创建的电子邮件带有指向我的网站的路径的链接,然后在URL字符串中接收电子邮件,就会将令牌保存在我的数据库中,如果正确,它会将我的activeverify数据库字段设置为true!

然而,它似乎也更改了我保存的Blowfish密码,每次我测试链接时,CakePHP似乎都会在users password字段中写入一个新的Blowfishhash。

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

所以这是我的用户模型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

我已经构建了一个简单的邮件到PHP代码(这是一个临时的、快速的发送电子邮件的方法,因为出于某种原因,CakePHP电子邮件对我不起作用,但我认为这取决于我的LAMP堆栈配置/gmail设置),这是向我的用户发送链接的行

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

我正在设置一个"活动;"verified'标记到数据库中,如果以后我想停用该用户,我可以。我还将"token"擦除为null,这样,如果用户更改了他们的电子邮件地址,我就可以设置一个新的token,我只想确保它将是一个新token!

我确信它对我的模型做了修改,但我看不出它出了什么问题,它对密码字段的isset进行了if检查,哪一个不是?除非我不了解数据的移动方式?

谢谢。

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

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

相关内容

  • 没有找到相关文章

最新更新