当用户忘记旧密码时,我正在尝试为他们设置一个新密码。 我有代码,它可以正常工作(创建一个新的随机密码,更新数据库并通过电子邮件将其发送到输入的电子邮件),但是当我尝试使用新密码登录时,它显示了无效的密码(显然旧密码也不正确) )

我的代码是:

function forgot() {
if(!empty($this->data)) {
     $user = $this->User->findByEmail($this->data['User']['email']);
     $user_email = $this->data['User']['email'];
     if($user) {
       $user['User']['tmp_password'] = $this->User->createTempPassword(10);
       $user['User']['password'] = $this->Auth->password($user['User']['tmp_password']);
        if($this->User->save($user, false)) {
            $this->User->set('User.password', $user['User']['password'], array('User.email' => $user_email));       
            $this->User->save();
            $this->__sendPasswordEmail($user,$user['User']['tmp_password']);
            $this->Session->setFlash('An email has been sent with your new password.');
            $this->redirect($this->referer());
       }
     } else {
       $this->Session->setFlash('No user was found with the submitted email address.');
     }
   }
}



 public function beforeSave($options = array()) {
    // hash our password
    if (isset($this->data[$this->alias]['password'])) {
        $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
    }

    // if we get a new password, hash it
    if (isset($this->data[$this->alias]['password_update']) && !empty($this->data[$this->alias]['password_update'])) {
        $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password_update']);
    }

    // fallback to our parent
    return parent::beforeSave($options);
}


function createTempPassword() {
$alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
$pass = array(); //remember to declare $pass as an array
$alphaLength = strlen($alphabet) - 1; //put the length -1 in cache
for ($i = 0; $i < 8; $i++) {
    $n = rand(0, $alphaLength);
    $pass[] = $alphabet[$n];
}
return implode($pass); //turn the array into a string
}

我读了几个类似的问题,我已经看到密码哈希可能是个问题,但是我看不到密码在我的代码中在哪里交互,因为我使用相同的哈希方法。 (您可能会问为什么我使用$ this-> User-> set / Save-好吧,我只是想弄清楚这个问题,不是吗。)

密码如:BT9DPRsN-bcfbde69a31197d18589e81dd41af6dbc3c21557

谢谢。

#1楼 票数:1 已采纳

注释此行,它将对您$user['User']['password'] = $this->Auth->password($user['User']['tmp_password']);

这背后的原因是因为每当您尝试将密码字段保存在数据库中时,您都已经在cakephp回调函数beforeSave对密码进行了哈希处理,它将首先对其进行哈希处理然后保存。 希望能有所帮助。

#2楼 票数:0

我认为您已经两次对密码进行了哈希处理,
控制器中的beforeSave()中的第一个,模型(AppModel或用户)中的beforeSave()中的第二个
您应该使用一次,(可以清除最近的Controller中的语句返回beforeSave()或仅在AppModel中定义的beforeSave()返回)。
http://rao5s.vn

  ask by rgerculy translate from so

未解决问题?本站智能推荐:

1回复

Cakephp更新密码

我正在尝试编辑我的会员密码之一(用户已允许我输入密码)。 现在,对于此功能,我将执行以下操作: 但是,当我尝试保存时,出现以下错误: 因此,它尝试插入一个新条目。 有人知道我在做什么错吗?
3回复

重置密码不会保存新密码CakePHP2.0

我现在已经使系统通过了该过程,但是由于某种原因,用于实际更新数据库中密码的代码没有更新任何内容吗? 插入新密码并重新输入密码后,即使没有显示错误,系统也会立即重定向到登录页面。 有什么想法吗? 谢谢。 这是我的重置功能 这是我的reset.ctp 请帮我,谢谢
1回复

Cakephp3.0alpha2如何将新密码与旧密码进行比较?

好的,所以我正在通过将我的应用程序(2.5)转移到3.x来测试Cakephp 3.0 alpha2。 我当前的应用程序已对其进行了设置,以便出于安全目的,在重置密码时,您无法将其更改为前六个密码(存储在由user_id连接该密码的密码表中)中的任何一个。 当我查看Cake 3.0中的更改时,
2回复

输入新密码后保存按钮

我在这里发布了演示http://jsfiddle.net/Z9JmB/5/ 我想显示视图(cakephp)但是在单击保存按钮以保存新输入的密码后,我没有任何视图,它根本不移动。 我尝试在表单的操作中手动输入指定的URL,并显示页面。 我想知道如何解决这个问题? (表单的提交按钮需要修复
5回复

仅填写字段时才更新密码

我的看法: 我的控制器: 在我使用空白密码提交表单时,数据库中的哈希值仍会发生变化。 如果填写了新密码,我该如何才更新密码哈希。 谢谢。 编辑:$ data ['用户'] ['密码']始终是一个哈希,永远不会空!
1回复

CakePHP/2.x中捆绑的composer.json

CakePHP / 2.6下载包含一个顶级composer.json文件 : 但是,当我运行composer install内容会安装在似乎不符合CakePHP约定的新创建的文件夹中: Plugin而不是plugins vendor而不是vendors ...最后我得到了:
1回复

将Cakephp1.3迁移到2.x惰性模型错误

我已经按照该文档从cakephp 1.3迁移到2.X。 我收到此错误。 PHP致命错误:在app / Model / AppModel.php中找不到类“ LazyModel” 我签入了文件,我可以看到这一行。 App :: import('Lib','LazyModel');
1回复

Cakephp版本2.x无法在编辑视图中显示选定的文件名

希望这是一个简单的问题。 我有一个Cakephp MVC,可以上传图像并将其存储在数据库表中。 索引,视图和添加正在按我的方式工作。 但是,在“编辑”视图中,我如何指示该记录当前具有一个可以保存更改的上载图像。 我无法弄清楚在“文件输入按钮”的属性中设置什么以显示现有文件名。