2011-03-15 123 views
2

我正在尝试自动注册用户。您输入一个电子邮件地址并向用户发送密码。听起来很简单,对吧?以下是我在添加操作中尝试过的一些内容,但它们都不起作用(如所示)。如何在CakePHP中保存自动生成的密码?

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组件中的用户名字段)。

+1

为什么不会在第一次尝试的工作?蛋糕不会删除密码。为什么当Auth组件只存储你的散列时,它会删除它。 – JohnP 2011-03-15 16:58:51

+0

第一次执行失败时失败了什么?它保存了一个空白的密码,还是一个“错误的”密码? Auth组件不应该通过'Model :: save'调用来解决。 – 2011-03-15 17:03:08

+0

@JohnP - 感谢您解决这个问题。可能是错误的信息。 @Daniel - 第一种方法导致密码为空。实际上,它们都会导致密码空白。 – dbme 2011-03-15 17:22:48

回答

0

JohnP回答在评论这个问题。我在beforeSave行动中有一些垃圾。删除,现在它的工作完美。再次感谢JohnP!

2

首先的..你可以做

$random_pass = $this->Auth->password($this->generatePassword()); 
pr($random_pass); 

,以确保存在该变量实际数据...

那么你可以保存这些数据...

$this->data['User']['password'] = $random_pass; 
$this->User->save($this->data); 

也请记住,你有你的......测试期间,如果(!空($这个 - >数据)) 所以一定要确保你实际上是在什么地方哟进入某种形式的默认数据的测试你的形式。

0

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

0

我使用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']); 
    } 
} 
+0

** SQL注入警报!**使用参数化查询,而不是字符串连接。 – michaelb958 2013-06-01 06:21:32