Как сохранить автоматически сгенерированный пароль в CakePHP?
Я пытаюсь автоматически регистрировать пользователей. Вы вводите адрес электронной почты, и он отправляет пользователю пароль. Звучит достаточно просто, не так ли? Вот куча вещей, которые я пробовал в своем add action, но ни одна из них не работает (как указано).
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)) { /* ... */ }
}
Согласно Почему поле пароля CakePHP пусто при попытке доступа к нему с помощью $this - > data? это потому, что компонент Auth удаляет пароль. Кажется, достаточно распространенным, не так ли? Так как же мне передвигаться это?
Дополнительная информация
Я использую эту функцию для генерации пароля. В представлении add есть только три поля: first_name, last_name и email (которое назначается полю username в компоненте Auth).
4 ответа:
Прежде всего.. вы можете сделать
$random_pass = $this->Auth->password($this->generatePassword()); pr($random_pass);
Чтобы убедиться, что в этой переменной действительно есть данные...
Затем вы можете сохранить эти данные...
$this->data['User']['password'] = $random_pass; $this->User->save($this->data);
Также имейте это в виду... во время тестирования у вас есть если (!пустой($this - > data)) поэтому убедитесь, что вы действительно тестируете, введя какую-то форму данных по умолчанию где-то в вашей форме.
Может быть, у вас есть некоторые правила проверки, определенные в вашей пользовательской модели, которые не удовлетворены? Вы можете попробовать проверить это, напечатав
$this->validationErrors
(или просто проверить модель пользователя, чтобы увидеть, есть ли какие-либо правила).
Джонп ответил на этот вопрос в комментариях. Я был не в значение beforesave действий. Удалили и теперь он работает отлично. Еще раз спасибо, Джонп!
Я использую 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']); } }