Как я могу сохранить автоматически сгенерированный пароль в CakePHP? - PullRequest
2 голосов
/ 15 марта 2011

Я пытаюсь автоматически регистрировать пользователей. Вы вводите адрес электронной почты, и он отправляет пользователю пароль. Звучит достаточно просто, правда? Вот несколько вещей, которые я пробовал в своем действии добавления, но ни одна из них не работает (как указано).

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 удаляет пароль. Кажется достаточно распространенным, нет? Так как мне обойти это?

Дополнительная информация

Я использую эту функцию для генерации пароля. Представление добавления имеет только три поля: first_name, last_name и email (которое назначено полю имени пользователя в компоненте Auth).

Ответы [ 4 ]

2 голосов
/ 15 марта 2011

прежде всего .. вы можете сделать

$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)), поэтому убедитесь, что вы действительно тестируете, введя некоторую форму данных по умолчанию где-то в вашемформа.

0 голосов
/ 01 июня 2013

Я использую 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']);
  }
}
0 голосов
/ 16 марта 2011

JohnP ответил на этот вопрос в комментариях.У меня был какой-то мусор в акции beforeSave.Удалено и теперь работает отлично.Еще раз спасибо JohnP!

0 голосов
/ 15 марта 2011

Может быть, у вас есть некоторые правила проверки, определенные в вашей пользовательской модели, которые не удовлетворены? Вы можете попытаться проверить это, напечатав $this->validationErrors (или просто проверьте свою модель пользователя, чтобы увидеть, есть ли какие-либо правила).

...