誰かがflask-securityのパスワードリセットトークンで何が起こっているのかを教えてもらえますか?コードはここ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)