2012-12-16 3 views
5

Может ли кто-нибудь пройти меня через то, что происходит в токене сброса пароля флай-безопасности? Код здесь на GitHub:Объяснение функциональности сброса пароля на токенах в Flask-Security

https://github.com/mattupstate/flask-security/blob/develop/flask_security/recoverable.py

(Там могут быть и другие части до каталога.)

Мое понимание того, что происходит:

  1. В маршруте, определенном forgot_password () Пользователь отправил форму на сброс пароля
  2. Создано "reset_password_token". Это состоит из идентификатора пользователя + md5() текущего (зашифрованного) пароля пользователя?
  3. Ссылка создана для адреса пароля сброса, содержащего токен.
  4. Эта ссылка отправлена ​​по электронной почте по адресу user.email
  5. Когда пользователь нажимает на эту ссылку, они переходят на маршрут (определенный в виде), который является reset_password (токен). Значение токена является аргументом для этого маршрута.
  6. Маршрут оценивает, действителен ли токен и не истек.
  7. Если да, этот маршрут отображает форму с запросом нового пароля, ResetPasswordForm().

Верно ли это?

также:

  1. Если выше правильно, безопасно, чтобы сделать маркер содержит новую md5() текущего пароля? Я знаю, что это должно быть уникальным и дорогостоящим, но все же?
  2. Где хранится срок годности?

Я наиболее определенно спутать функцией generate_password_reset

data = [str(user.id), md5(user.password)] return _security.reset_serializer.dumps(data)

и функции

get_token_status(token, 'reset', 'RESET_PASSWORD') внутри reset_password_token_status(token)

ответ

4

Он использует itsdangerous модуль для сериализации маркер. Если вы читали об этом подробнее ниже, вы будете иметь ваши ответы о том, как время окончания используется и т.д.

http://packages.python.org/itsdangerous/

Функция serializer.dumps() создает уникальную последовательную строку и serializer.loads() которая вызывается get_token_status возвратит исключения, если только точное сериализованное значение предоставляется ему как параметр.

Итак, вы dumps(), а затем используя возвращаемое значение, вы вызываете loads(). Если это не соответствует, у вас есть исключение, которое в этом случае означает плохой токен.

 Смежные вопросы

  • Нет связанных вопросов^_^