我正在关注一些关于使用CakePHP重置忘记密码的在线示例。这是代码:
$temp = $this->User->findByEmail($this->data['User']['email']);
$user = $temp['User']['UID'];
$this->set('email', $this->data['User']['email']);
if($user)
{
$new_salt = UsersController::generateStr();
$new_password = UsersController::generateStr(5);
$temp_password = Security::hash((Security::hash($new_password,'md5',false) . $new_salt), 'md5', false);
$data = array('User' => array('UID' => $user, 'Password' => $temp_password));
$this->User->save($data, false, array('Password'));
$data = array('User' => array('UID' => $user, 'Salt' => $new_salt));
$this->User->save($data, false, array('Salt'));
$to = $this->data['User']['email'];
$subject = "RideShare Password Reset";
$message = "Your new RideShare password is " . $new_password;
$headers = "";
mail($to, $subject, $message, $headers);
$this->Session->setFlash('Your new password has been sent to' . $this->data['User']['email']);
}
当此代码执行时,我的页面显示以下调试信息:
Query: INSERT INTO `users` (`Password`, `modified`, `created`) VALUES ('81a5392c1d9687811cfeb7e66c887a4a', '2011-07-08 23:53:05', '2011-07-08 23:53:05')
Query: INSERT INTO `users` (`Salt`) VALUES ('HjP1miaias')
但是当我通过访问phpMyAdmin直接检查数据库时,我发现这些值实际上没有更新过。
感谢任何建议。
答案 0 :(得分:0)
INSERT INTO
个查询将新行插入数据库。如果查看数据库中的最近条目,您可能会看到它已插入两个新条目,一个带有密码,另一个带有salt。您需要设置ID,以便Cake在使用$this->User->id = $user
保存之前知道要更新的条目。
您使用UID
作为id字段的名称而不是Cake标准id
,我不知道这是否是问题的一部分。 (理论上,如果模型配置正确,则不应使用非标准字段名称。)