在cakephp中将密码更改为设置值

在cakephp中将密码更改为设置值,php,cakephp,passwords,cakephp-2.1,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

我正在使用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;
}
如果我运行此功能并检查我的数据库,我可以看到password的值已从字面上更改为name2014,但我无法使用该密码登录

如果我将密码设置为$passHashed并检查我的数据库,我会看到password的值已更改为hashed值,但同样,我无法使用新密码登录

在我的用户表中还有一个“salt”字段,它永远不会更改

我猜问题在于salt需要使用密码散列进行更新,以便正确地删除它,但我不确定如何更新salt。我可以在我的控制器中获取它并直接设置值,还是用AuthComponent以其他方式处理

关于此主题的其他帖子似乎与我一直使用的代码配合得很好,但我也没有发现任何试图直接设置密码值的帖子。

使用beforeSave中的内容。不要在控制器中尝试哈希路由

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

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

这是其中的一种,答案只是调试代码的一个小步骤,因为很明显,只要查看数据中的内容和时间,就可以知道在哪里发生了什么以及为什么发生了什么。

为什么要对其进行两次哈希运算?您应该让模型层处理散列,不需要额外的操作。另外,你可能想调查一下。也许你喜欢用干净利落的方式存储和更新密码。ajax函数中的散列只是一个测试。beforeSave似乎从未运行过,因为如果我不在ajax函数中执行,密码不会被散列,但是如何调试呢?我在BeforeSave中的调试语句中没有看到任何内容。您是否使用了我提供的代码?包括出口;紧接着?如果您这样做了,但它仍然没有显示,则可能已将调试模式设置为0关闭。是。调试模式设置在哪里?我在那里看到:Configure::write'debug',1;是否需要代码来显示错误日志?将其更改为2,并使用我在回答中提供的代码。