Хорошо, 2.x определенно дает больше контроля. Я только хэширования паролей в методе BeforeSave моей модели пользователя точно так же как вы делаете:
public function beforeSave() {
if (isset($this->data['User']['password'])) {
$this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
}
return true;
}
Это позволяет создать пароль в действии сброса пароля контроллера в виде обычного текста, по электронной почте пользователю, а затем установить пароль в модели пользователя и сохранить его (пароль хэшируется до того, как он попадет в базу данных). Важно то, что ваш пароль остается открытым, пока ваш контроллер не вызовет метод сохранения.
Как правило, я всегда добавляю в поле пароля неуправляемое поле в действиях контроллера, которое сохранит запись пользователя, чтобы убедиться, что она не будет перезаписана. Второй вариант заключается в том, чтобы добавить обратный вызов afterFind к вашей модели пользователя, который отключает каждый раз при загрузке модели пользователя.
О единовременном сбросе ключа .... У меня есть дополнительное поле в объекте User, которое я использую в двух случаях. Проверка электронной почты и сброс пароля. Когда пользователь создан, он устанавливается на SHA1 (+ +). Ссылка отправляется по электронной почте пользователю, который отправляет их действию проверки правителя пользователя. После проверки этого ключа этот столбец очищается в базе данных.
То же самое со сбросом пароля. Когда они запрашивают сброс, значение генерируется таким же образом, и ссылка на действие сброса контроллера пользователя отправляется пользователю по электронной почте. Они вводят свой идентификатор пользователя, и если ключ в ссылке совпадает с ключом в строке базы данных, они могут изменить свой пароль. Когда их пароль изменен, это значение снова очищается.
Самая большая проблема с отправкой временных паролей заключается в том, что она создает механизм DoS (против пользователей, а не вашего сайта). Если я решил преследовать кого-то, я мог бы создать задачу, которая будет каждый день перезагружать свой пароль. Они не могут войти, пока не проведут проверку своей электронной почты, но потом это снова изменится. Используя ключ, они получат электронное письмо со ссылкой на сброс, но их текущий пароль по-прежнему будет работать, поскольку наличие кода сброса не позволит им войти в систему.
ли вы [это] (http://www.dereuromark.de/2011/08/25/working-with-passwords-in-cakephp/) прибегая к помощи для предмета? – mark
Я думаю, что им не хватает проблемы. Лично я бы посоветовал не отправлять временный пароль, поскольку он победит цель хэширования. Но если вы должны создать временный пароль, сгенерируйте его, отправьте его, хеш его, сохраните? –
В настоящее время у меня есть это в моей модели пользователя: public function beforeSave ($ options = array()) { $ this-> data ['User'] ['password'] = AuthComponent :: password ($ this- > данные [ 'User'] [ 'пароль']); return true; } Означает ли это, что все, что приходит с полем пароля, будет хэшироваться? – Marc