Сброс пароля для входа в Flask

Я использую библиотеку flask-login и не смог найти хороших руководств или документации о том, как разрешить пользователю сбрасывать свой пароль по электронной почте. В каком направлении/ресурсах я могу посмотреть, как это сделать? Тщательный поиск в гугле ничего полезного не дал.


person Jason Brooks    schedule 13.04.2014    source источник


Ответы (3)


flask-login не занимается электронными письмами для сброса пароля и другими подобными вещами. Он предназначен только для управления сеансами и файлами cookie.

Вам следует использовать Flask-Security, который добавляет в flask функцию сброса пароля и другие общие функции, связанные с безопасностью. Flask-Security использует flask-login для обработки сеансов, но добавляет другие функции, чтобы завершить функции безопасности:

Подтверждение электонной почты

При желании вы можете потребовать, чтобы новые пользователи подтверждали свой адрес электронной почты. Flask-Security отправит сообщение электронной почты всем новым пользователям со ссылкой для подтверждения. При переходе по ссылке подтверждения пользователь автоматически войдет в систему. Существует также представление для повторной отправки ссылки подтверждения на указанное электронное письмо, если пользователь попытается использовать токен с истекшим сроком действия или потерял предыдущее электронное письмо. Ссылки подтверждения можно настроить так, чтобы они истекали через определенное время.

Сброс/восстановление пароля

Сброс и восстановление пароля доступны, когда пользователь забывает свой пароль. Flask-Security отправляет пользователю электронное письмо со ссылкой на представление, в котором он может сбросить свой пароль. После сброса пароля они автоматически входят в систему и с этого момента могут использовать новый пароль. Ссылки для сброса пароля можно настроить таким образом, чтобы срок их действия истекал через определенное время.

Регистрация пользователя

Flask-Security поставляется с базовым представлением регистрации пользователей. Это представление очень простое, и новым пользователям нужно только указать адрес электронной почты и пароль. Это представление можно переопределить [так в оригинале], если в процессе регистрации требуется больше полей.

person Burhan Khalid    schedule 13.04.2014

Базовая логика:

  1. Создайте форму сброса пароля с полем email.
  2. When user submit form then you should:
    1. check this email in database
    2. сгенерировать ничем не примечательный криптослучайный секретный ключ (далее просто секретный ключ)
    3. сохранить этот ключ, текущую отметку времени и идентификатор пользователя в кэше или базе данных
    4. отправить его на электронную почту пользователя или смс
  3. When user apply secret key (for example with url or special form) you should:
    1. validate it (exist, not expired, not used before)
    2. получить идентификатор пользователя
    3. удалить или пометить как использованный текущий секретный ключ
    4. предоставить логику для ввода/генерации нового пароля.

Логика ввода/генерации пароля может быть разной:

  1. войти в систему и показать форму для ввода нового пароля - одноразовый ключ для входа
  2. показать форму для ввода пароля, чем логин, если он действителен
  3. сгенерировать новый пароль и отправить его на электронную почту пользователя
  4. сгенерировать новый секретный ключ для формы для ввода нового пароля и отправить его на электронную почту пользователя
  5. сгенерируйте новый секретный ключ для утверждения формы, отправьте его по смс, покажите форму для ввода нового пароля и секретного ключа утверждения, затем войдите в систему, если он действителен
person tbicr    schedule 13.04.2014
comment
Отличный ответ. Использование Flask-Security немного облегчило жизнь, так как мне не пришлось ничего писать с нуля, но эта методология определенно полезна. - person Jason Brooks; 15.07.2014
comment
Это отличный ответ, часто не хватает документации, чтобы научиться делать такие вещи с нуля. - person Mojimi; 24.04.2019

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

person Kate Sinclair    schedule 16.11.2020