web-dev-qa-db-ja.com

Flask-ログインパスワードのリセット

flask-loginライブラリを使用していますが、ユーザーが電子メールでパスワードをリセットできるようにする方法についての優れたチュートリアルやドキュメントを見つけることができませんでした。これを行う方法について、どのような方向性/リソースを見ることができますか?徹底的なグーグル検索は何も有用なものを明らかにしませんでした。

19
Jason Brooks

flask-loginパスワードのリセットメールなどは処理しません。セッションとCookieを管理するためだけにあります。

Flask-Security これは、パスワードリセット機能およびその他の一般的なセキュリティ関連機能をflaskに追加します。 Flask-Securityはflask-loginを使用してセッションを処理しますが、セキュリティ機能を完成させるために他の機能を追加します。

メール確認

必要に応じて、新しいユーザーにメールアドレスの確認を求めることができます。 Flask-Securityは、確認リンクを含む電子メールメッセージを新しいユーザーに送信します。確認リンクに移動すると、ユーザーは自動的にログインします。ユーザーが期限切れのトークンを使用しようとした場合、または前の電子メールを紛失した場合に、特定の電子メールに確認リンクを再送信するためのビューもあります。確認リンクは、指定した時間が経過すると期限切れになるように構成できます。

パスワードのリセット/回復

パスワードのリセットと回復は、ユーザーが自分のパスワードを忘れた場合に利用できます。 Flask-Securityは、パスワードをリセットできるビューへのリンクを記載した電子メールをユーザーに送信します。パスワードがリセットされると、自動的にログインし、それ以降は新しいパスワードを使用できます。パスワードリセットリンクは、指定した時間が経過すると期限切れになるように構成できます。

ユーザー登録

Flask-Securityには、基本的なユーザー登録ビューがパッケージ化されています。このビューは非常にシンプルで、新規ユーザーはメールアドレスとパスワードを入力するだけで済みます。登録プロセスでさらに多くのフィールドが必要な場合は、このビューをオーバーライドできます[原文のまま]。

21
Burhan Khalid

基本ロジック:

  1. emailフィールドを使用してパスワードのリセットフォームを作成します。
  2. ユーザーがフォームを送信するときは、次のことを行う必要があります。
    1. データベースでこのメールを確認してください
    2. 区別のつかない暗号ランダム秘密鍵を生成します(次は秘密鍵のみ)
    3. このキー、現在のタイムスタンプ、およびユーザー識別子をキャッシュまたはデータベースに保存します
    4. ユーザーの電子メールまたはSMSに送信します
  3. ユーザーが秘密鍵を適用する場合(たとえば、URLまたは特殊なフォームを使用)、次のことを行う必要があります。
    1. それを検証します(存在する、期限切れではない、以前に使用されていない)
    2. ユーザー識別子を取得する
    3. 現在の秘密鍵を使用済みとして削除またはマークする
    4. 新しいパスワードを入力/生成するロジックを提供します。

パスワードを入力/生成するロジックは異なる場合があります。

  1. ユーザーにログインし、フォームを表示して新しいパスワードを入力します-1回限りのログインキー
  2. 有効な場合は、ログインよりもパスワードを入力するためのフォームを表示する
  3. 新しいパスワードを生成し、ユーザーの電子メールに送信します
  4. フォームの新しい秘密鍵を生成して、新しいパスワードを入力し、ユーザーの電子メールに送信します
  5. フォームを承認するための新しい秘密鍵を生成し、SMS経由で送信し、フォームを表示して新しいパスワードと承認秘密鍵を入力し、有効な場合はログインします
18
tbicr