2011-03-15 119 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