Я использую библиотеку flask-login
и не смог найти хороших руководств или документации о том, как разрешить пользователю сбрасывать свой пароль по электронной почте. В каком направлении/ресурсах я могу посмотреть, как это сделать? Тщательный поиск в гугле ничего полезного не дал.
Сброс пароля для входа в Flask
Ответы (3)
flask-login
не занимается электронными письмами для сброса пароля и другими подобными вещами. Он предназначен только для управления сеансами и файлами cookie.
Вам следует использовать Flask-Security
, который добавляет в flask функцию сброса пароля и другие общие функции, связанные с безопасностью. Flask-Security использует flask-login для обработки сеансов, но добавляет другие функции, чтобы завершить функции безопасности:
Подтверждение электонной почты
При желании вы можете потребовать, чтобы новые пользователи подтверждали свой адрес электронной почты. Flask-Security отправит сообщение электронной почты всем новым пользователям со ссылкой для подтверждения. При переходе по ссылке подтверждения пользователь автоматически войдет в систему. Существует также представление для повторной отправки ссылки подтверждения на указанное электронное письмо, если пользователь попытается использовать токен с истекшим сроком действия или потерял предыдущее электронное письмо. Ссылки подтверждения можно настроить так, чтобы они истекали через определенное время.
Сброс/восстановление пароля
Сброс и восстановление пароля доступны, когда пользователь забывает свой пароль. Flask-Security отправляет пользователю электронное письмо со ссылкой на представление, в котором он может сбросить свой пароль. После сброса пароля они автоматически входят в систему и с этого момента могут использовать новый пароль. Ссылки для сброса пароля можно настроить таким образом, чтобы срок их действия истекал через определенное время.
Регистрация пользователя
Flask-Security поставляется с базовым представлением регистрации пользователей. Это представление очень простое, и новым пользователям нужно только указать адрес электронной почты и пароль. Это представление можно переопределить [так в оригинале], если в процессе регистрации требуется больше полей.
Базовая логика:
- Создайте форму сброса пароля с полем
email
. - When user submit form then you should:
- check this email in database
- сгенерировать ничем не примечательный криптослучайный секретный ключ (далее просто секретный ключ)
- сохранить этот ключ, текущую отметку времени и идентификатор пользователя в кэше или базе данных
- отправить его на электронную почту пользователя или смс
- When user apply secret key (for example with url or special form) you should:
- validate it (exist, not expired, not used before)
- получить идентификатор пользователя
- удалить или пометить как использованный текущий секретный ключ
- предоставить логику для ввода/генерации нового пароля.
Логика ввода/генерации пароля может быть разной:
- войти в систему и показать форму для ввода нового пароля - одноразовый ключ для входа
- показать форму для ввода пароля, чем логин, если он действителен
- сгенерировать новый пароль и отправить его на электронную почту пользователя
- сгенерировать новый секретный ключ для формы для ввода нового пароля и отправить его на электронную почту пользователя
- сгенерируйте новый секретный ключ для утверждения формы, отправьте его по смс, покажите форму для ввода нового пароля и секретного ключа утверждения, затем войдите в систему, если он действителен
Flask-Login
обеспечивает управление сеансом пользователя только для Flask. Он выполняет общие задачи входа в систему, выхода из системы и запоминания сеансов ваших пользователей в течение длительных периодов времени. но не сброс пароля, изменение пароля, подтверждение по электронной почте и т. д.
Flask-security
был лучшим и простым вариантом для этого. Он вполне справляется со всем. но активно не поддерживается.
Примечание. Этот проект больше не поддерживается. В качестве альтернативы рассмотрите проект Flask-Security-Too. -- Из flask-security репозитория Github.
Поэтому я рекомендую библиотеку Flask-Security-Too
, которая является улучшенной версией и активно поддерживается. . Он также имеет гораздо больше функций, таких как 2FA Auth, Unified Sign-In и т. д.
Вы можете установить его с помощью pip
pip install flask-security-too flask-sqlalchemy
и импортировать библиотеки, такие как
from flask-security import current_user, login_required
Несколько полных (но простых) примеров доступны в каталоге примеров из репозитория Flask-Security.
Документация: https://flask-security-too.readthedocs.io/en/stable/index.html