更改密码以在cakephp中设置值

时间:2014-07-10 18:40:05

标签: php cakephp passwords cakephp-2.1

我正在使用Cake 2.1.1并尝试编写一个ajax函数来将用户密码重置为特定格式。我已经能够更改密码,但无法使密码实际上用于登录用户。

我的用户控制器中有这个功能:

function ajax_reset_password(){
    $this->autoRender=false;

    $user = $this->User->find('first',array(
        'conditions'=>array('User.email'=>$_GET['email'])
    ));
    $this->User->id = $user['User']['id'];

    $pass = $_GET['name'].'2014';
    $passHashed= $this->Auth->password($pass); 

    $this->User->set('password', $pass);
    $this->User->set('updated_at',date("Y-m-d H:i:s"));
    $this->User->save();

    //... code to email user new password
}

这是我的用户控制器之前保存:

public function beforeSave(){
    if (isset($this->data['User']['password'])) { 
        $this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
    }
    return true;
}

如果我运行此功能并检查我的数据库,我可以看到密码的值已逐字地更改为" name2014",但我无法使用该密码登录。

如果我将密码设置为$ passHashed并检查我的数据库,我看到密码的值已更改为哈希值,但我再次无法使用新密码登录。

还有一种盐'我的Users表中永远不会更改的字段。

我猜测问题是盐需要使用密码哈希进行更新才能正确解密,但我不确定如何更新盐。我可以在我的控制器中获取它并直接设置值,还是通过AuthComponent以其他方式处理?

关于此主题的其他帖子似乎与我一直使用的代码一致,但我还没有找到任何试图直接设置密码值。

1 个答案:

答案 0 :(得分:0)

使用beforeSave()中的内容。 (不要在Controller中尝试散列路径)。

如果没有散列,只需进行一些标准调试,找出为什么它没有进入代码的那一部分:

debug($this->data);
exit;
if (isset($this->data['User']['password'])) {
    // IT'S NOT GETTING HERE
    //...

这是“回答”只是调试代码的一个方面,因为很明显,只要看到数据中的内容和时间,就可以确切地知道发生了什么以及为什么。