2014-01-07 4 views
0

Я пытаюсь сделать простую функцию сброса пароля, которая позволяет администратору изменять пароль пользователя и отправлять им новый пароль. Все работает, за исключением того, что пароль никогда не изменяется в базе данных. Я нашел много информации об этой теме, но ничего не сработало. Почему пароль не изменяется? Я использую CakePHP 2.1Сменить пароль в cakephp 2x

Я попытался это:

public function auto_reset_password($id = null){ 
    $this->User->id = $id; 
    $randomPass= $this->User->generatePassword(); 
    $randomPassHashed= $this->Auth->password($randomPass); 
    $this->User->set('password', $randomPassHashed); 
    $this->User->save(); 
    //email code.... 
} 

и подставляя:

$u = $this->User->find('first', array(
    'conditions' => array('User.id' => $id) 
)); 
//..... 
$u['User']['password'] = $randomPassHashed; 

Мой пользователь модальный имеет этот BeforeSave:

public function beforeSave() { 
    if (isset($this->data[$this->alias]['password'])) { 
     $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']); 
    } 
    return true; 
} 
+0

Старайтесь избегать его хэширования дважды (что вы делаете здесь с помощью ручного хэш-вызова и через обратный вызов beforeSave()). Это также может помочь: [Работа с паролями в CakePHP] (http://www.dereuromark.de/2011/08/25/working-with-passwords-in-cakephp/) – mark

+0

Добавьте UserModel, чтобы мы могли принять взгляд. –

+0

Я избавился от первого хеша пароля и установил пароль с неуправляемым значением, но ничего не изменилось ... Что вы ищете в пользовательской модели? Я не могу найти какой-либо другой код, относящийся к этому в этом файле. Функция генерации пароля определенно работает. – Cbas

ответ

0

несколько вещей смотри:

  • в базе данных в поле «пароль» должен быть таким же именем, в противном случае он не будет сохранен
  • $this->User->save() попытается подтвердить ваши данные перед сохранением. Проверка может завершиться неудачей, если вы определили правила для не пустых писем или не пустое имя пользователя и так далее. Вам действительно нужно посмотреть на результат, который спасет возвращение! (Или вы можете отключить проверку как этот $this->User->save(null, false))
  • использование saveField() вместо того, чтобы: $this->User->saveField('password', $randomPassHashed);
  • убедитесь, что вы не двойное хеширование, как вы в оригинальный вопрос.
Смежные вопросы