Zend Framework не имеет класса, генерирующего пароли. Вот статья о том, как использовать модуль PEAR Text_Password
для генерации пароля:
https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/howdoi/?p=118
Однако отправлять пароль в виде простого электронного письма не рекомендуется. Вместо этого вы должны сбросить их учетную запись, чтобы они могли временно входить в систему без указания пароля (с учетом истекающего URL-адреса, который вы отправляете им по электронной почте), и, как только они войдут в систему, потребуют от них обновить свой собственный пароль до чего-то они знаю. Затем сохраните соленый хеш их пароля.
Вот несколько советов по поводу того, как сделать это в Zend Framework:
- Определите таблицу
AccountReset
с полями: reset_id
(первичный ключ GUID), account_id
(ссылка на Accounts.account_id
) и expiration
(метка времени).
- Реализовать действие под названием
AccountController::resetAction()
, т.е. на том же контроллере, который вы используете для создания учетных записей, входа в систему, смены паролей и т. Д.
- Когда пользователь выбирает сброс своей учетной записи, вставьте новую строку в таблицу
AccountReset
с новым GUID, ссылкой на учетную запись пользователя и expiration
30 минут или около того в будущем.
- Отправьте электронное письмо по адресу, указанному в файле для этого пользователя, включая URL-адрес, на который он должен нажать: «https ... / account / reset / reset_id /
<
GUID >
» (если вы сообразительны с правила маршрутизации, вы можете сократить этот URL, но оставить в нем GUID).
- Когда
AccountController::resetAction()
получает запрос, он ищет его параметр reset_id
в таблице AccountReset
. Если этот GUID существует и время expiration
не прошло, предоставьте пользователю форму для изменения своего пароля (без необходимости аутентификации и входа в систему).
- Если
resetAction()
получает запрос без GUID, или GUID не существует в базе данных, или эта строка прошла свой expiration
, тогда это действие может вместо этого предоставить пользователю кнопку для запуска нового сбросить запрос и отправить письмо с новым GUID. Не забудьте сделать эту кнопку запросом POST!
Поскольку GUID сообщается только по электронной почте на адрес этого пользователя, никто другой не может получить доступ для изменения пароля. Даже если электронная почта пользователя будет перехвачена, GUID предоставит такой доступ лишь в течение ограниченного времени.
Если вы хотите быть еще более осторожным, вы можете записать IP-адрес клиента в таблице AccountReset
и потребовать изменения пароля от клиента с тем же IP-адресом в течение этого 30-минутного окна.
Это всего лишь секрет, и я не реализовал его и не оценил для обеспечения надлежащей безопасности. Если вы несете ответственность за обеспечение безопасности, вы обязаны ознакомиться с вопросами безопасности. Хорошо известный ресурс для обеспечения безопасности PHP: http://phpsecurity.org/.