何をしていくか
「パスワードを忘れた」というユーザーのために、「パスワードの再設定」という操作ができるようにします。
「パスワードの再設定」とは
パスワードをダイジェストとしてRDBに保存している場合、ハッシュ関数の性質上、パスワードそのものを通知することはできません。そのため、「再設定」という操作が必要になります。大まかな手順は以下です。
- パスワードを再設定するユーザーは、新たなパスワードをフォームに入力し、アプリケーションに送信する
- アプリケーションは、1.で設定されたパスワードを元に新たにハッシュ値を生成する
- 2.で生成したハッシュ値を、当該ユーザーの新たなパスワードダイジェストとしてRDBに保存する
ユーザーの真正性を確認する方法
「第11章 アカウントの有効化」と同様の手順となります。
- ユーザーは、パスワード再設定用リンクを受け取るためのメールアドレスをアプリケーションに送信する
- アプリケーションは、パスワード再設定用のトークンとダイジェストの組を生成する
- アプリケーションは、2.で生成されたパスワード再設定用ダイジェストをRDBに保存する
- アプリケーションは、2.で生成されたパスワード再設定用トークンを含むURLを生成する
- アプリケーションは、4.で生成されたURLを含むメールを作成し、1.で指定されたメールアドレスに送信する
- ユーザーは、5.で送信されたメールに記載されたURLをクリックする
- アプリケーションは、6.でクリックされたURL(トークン)と2.でRDBに保存されたダイジェストを比較し、ユーザーの真正性を確認する
- アプリケーションは、ユーザーにパスワード再設定用フォームを返す
「第11章 アカウントの有効化」との類似点と相違点
類似点
今回実装する「パスワードの再設定」と、第11章で実装した「ユーザーの有効化」には、以下のような類似点があります。
- トークンとダイジェストの組を生成する
- トークンを含むURLを生成する
- ユーザーの登録メールアドレスにメールを送信する
- トークンを含むURLへの
GET
リクエストをトリガーとして認証を行う
相違点
一方で、以下のような相違点もあります。
- パスワードの再設定を実装する際には、既存のビューの変更を伴う
- ビューを2つ新たに実装する必要がある
- パスワード再設定用メールを受け取るメールアドレスの入力フォーム
- 再設定するパスワードそのものの入力フォーム
モックアップ
上述「相違点」でビュー3つが登場しました。Railsチュートリアル本文においては、当該ビューのレイアウトについて、以下のモックアップが提示されています。