Django で提供されているパスワードリセット機能の動作を参考にしながら、メール認証が必要なアカウント作成機能を作成してみました。
アカウント作成のためにユーザーがアクセスしてくると、
・ユーザー名
・姓
・名
・メールアドレス
を入力してもらうフォームを含んだテンプレートを表示し、
それが POST されてくると、
・ユーザー名の重複チェック
・メールアドレスの重複チェック
・トークン作成
・アカウント作成認証のためのリンクアドレス作成
・メール本文作成
・アカウント作成認証メール送信
を行います。
ユーザーが、届いたメールの本文に含まれている URL をクリックすると、
最初の段階とは異なる view で その GET リクエストを処理します。
・ユーザー名チェック
・トークンチェック
・リンクアドレスの有効期限チェック(発行後1時間以内に設定しています)
チェックが成功した場合は、パスワードを入力してもらうためのフォームを含んだテンプレートを表示します。
このとき、もう一度最初の段階で入力したユーザー名も併せて入力してもらっています。
これはもしかしたら必要ない処理かもしれませんが、
リンクアドレスをクリックしたユーザーが元のユーザーであるかを確かめる目的で取り敢えず行っています。
このテンプレートが POST リクエストされてくると、
・再度ユーザーチェック
・ユーザー作成
・ DB へ保存
を行い、「ログインできます」メッセージを表示します。
アカウントを作成しログインしたからといって、
現在できることはパスワード変更だけですが、
今後何かしらの機能を追加していければと考えています。
もしアカウント作成機能を使用中に何かおかしな動作に気付かれましたら、
コメント等で教えていただけると助かります。
Comment 1 by 管理人 2020年5月1日12:15
現時点では、アカウントを作成してログインしていただいても、パスワード変更、の操作が行えるだけです。
アカウント作成とメールによる認証機能の実装を試すのが目的でしたので、アカウント作成中になにか「不思議」な動作がありましたらご報告いただけると助かります。
I would appreciate if you tell me when there is something strange during creating an account.