我正在尝试自动注册用户。您输入一个电子邮件地址,它会向用户发送密码。听起来很简单吧?以下是我在添加操作中尝试过的一些内容,但它们都没有工作(如图所示)。
if (!empty($this->data)) {
$this->User->create();
$random_pass = $this->Auth->password($this->generatePassword());
// Doesn't work:
$user_data['User'] = $this->data['User'];
$user_data['User']['password'] = $random_pass;
if ($this->User->save($user_data)) { /* ... */ }
// Doesn't work:
$this->User->set('password', $random_pass);
if ($this->User->save($this->data)) { /* ... */ }
// Doesn't work:
$this->data['User']['password'] = $random_pass;
if ($this->User->save($this->data)) { /* ... */ }
// Doesn't work:
$this->data['User'][0]['password'] = $random_pass;
if ($this->User->saveAll($this->data)) { /* ... */ }
}
根据Why is the CakePHP password field is empty when trying to access it using $this->data?,这是因为Auth组件正在删除密码。似乎很常见,不是吗?那我该如何解决呢?
更多信息
我正在使用this function来生成密码。添加视图只有三个字段,first_name,last_name和email(分配给Auth组件中的用户名字段)。
答案 0 :(得分:2)
首先......你可以做到
$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)) 因此,请确保通过在表单中的某处输入某种形式的默认数据来进行测试。
答案 1 :(得分:0)
也许您的用户模型中定义了一些不满意的验证规则?您可以尝试通过打印$this->validationErrors
来检查此问题(或只是检查您的用户模型以查看是否有任何规则)。
答案 2 :(得分:0)
JohnP在评论中回答了这个问题。我在beforeSave动作中有一些垃圾。删除,现在它的工作完美。再次感谢JohnP!
答案 3 :(得分:0)
我正在使用Cake PHP 2.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']);
}
}