如何在CakePHP中保存自动生成的密码?

如何在CakePHP中保存自动生成的密码?,cakephp,cakephp-1.3,registration,authentication,Cakephp,Cakephp 1.3,Registration,Authentication,我正在尝试自动注册用户。您输入一个电子邮件地址,它会向用户发送一个密码。听起来很简单,对吧?下面是我在add操作中尝试过的一些方法,但没有一种有效(如图所示) 据了解,这是因为Auth组件正在删除密码。看起来很普通,不是吗?那我该怎么处理呢 更多信息 我正在使用生成密码。添加视图只有三个字段,first\u name、last\u name和email(分配给Auth组件中的username字段)。首先。。你能行 $random_pass = $this->Auth->passwor

我正在尝试自动注册用户。您输入一个电子邮件地址,它会向用户发送一个密码。听起来很简单,对吧?下面是我在add操作中尝试过的一些方法,但没有一种有效(如图所示)

据了解,这是因为Auth组件正在删除密码。看起来很普通,不是吗?那我该怎么处理呢

更多信息


我正在使用生成密码。添加视图只有三个字段,first\u name、last\u name和email(分配给Auth组件中的username字段)。

首先。。你能行

$random_pass = $this->Auth->password($this->generatePassword());
pr($random_pass);
要确保该变量中实际存在数据

然后你可以用

$this->data['User']['password'] = $random_pass;
$this->User->save($this->data);
还要记住。。。在测试期间,您有if(!empty($this->data))
因此,通过在表单中的某个位置输入某种形式的默认数据,确保您实际上正在进行测试。

也许您在用户模型中定义了一些不满意的验证规则?您可以通过打印
$this->validationErrors
来检查这一点(或者只检查您的用户模型,看看是否有任何规则)。

JohnP在评论中回答了这个问题。我在之前的保存操作中有一些垃圾。移除后,现在它工作得很好。再次感谢你,约翰

我使用的是Cake PHP2.3.3,下面的代码对我很有用

public function recover()
{
  if ($this->request->is('post') )
  {
    $this->loadModel('AclManagement.User');
    $passwords = AuthComponent::password($this->data['User']['password']);
    $this->User->query("UPDATE users SET password = '".$passwords."' WHERE password_change = '".$this->request->data['User']['id']."' ");
    $this->Session->setFlash(__('Password Saved Sucessfully'), 'success');
    $this->redirect(array('action' => 'login'));
  } else {
    $this->set('resettoken', $_REQUEST['id']);
  }
}

为什么第一次尝试不起作用?蛋糕不会删除密码。当Auth组件只存储您的散列时,它为什么要删除它。当您的第一个实现失败时,什么失败了?它保存的是空白密码还是“错误”密码?Auth组件不应该能够处理
Model::save
调用。@JohnP-感谢您的帮助。可能是错误的信息@Daniel-第一种方法产生一个空白密码。实际上,它们都会导致一个空白密码。@dbme最奇怪的是。我的大部分项目都是和蛋糕一起工作,从来没有遇到过这个问题。在模型中的beforeSave操作中转储
$this->data
。看看那里是不是空的。并确保将debug设置为2,然后查看SQL@JohnP-我真是个笨蛋。我忘了我在确认页面上输入beforeSave操作是为了尝试保存。密码正在保存。SQL注入警报!使用参数化查询,而不是字符串连接。
public function recover()
{
  if ($this->request->is('post') )
  {
    $this->loadModel('AclManagement.User');
    $passwords = AuthComponent::password($this->data['User']['password']);
    $this->User->query("UPDATE users SET password = '".$passwords."' WHERE password_change = '".$this->request->data['User']['id']."' ");
    $this->Session->setFlash(__('Password Saved Sucessfully'), 'success');
    $this->redirect(array('action' => 'login'));
  } else {
    $this->set('resettoken', $_REQUEST['id']);
  }
}