有人可以告诉我烧瓶安全的密码重置令牌中发生了什么吗?代码在github上:
https://github.com/mattupstate/flask-security/blob/develop/flask_security/recoverable.py
(目录中可能还有其他部分。)
我对正在发生的事情的理解:
- 在 forgot_password() 定义的路由中,用户提交表单以重置密码
- 生成“reset_password_token”。这由用户的 ID + 用户当前(存储加密)密码的 md5() 组成?
- 生成指向包含令牌的重置密码地址的链接。
- 此链接通过电子邮件发送到 user.email 提供的地址
- 当用户单击该链接时,他们会转到一条路线(在视图中定义),即 reset_password(token)。令牌值是此路由的参数。
- 该路由评估令牌是否有效且未过期。
- 如果是这样,则此路由会呈现一个要求输入新密码的表单,即 ResetPasswordForm()。
那是对的吗?
还:
- 如果上面是正确的,让令牌包含当前密码的新 md5() 是否安全?我知道它应该是独一无二的,而且逆转成本很高,但仍然如此吗?
- 有效期存储在哪里?
我对 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)