Railsチュートリアル:12章(わからないとこメモです)
もはや最後までいったんいくことのみが目標になってしまった
第12章パスワードの再設定
やることまとめ。
- ユーザーがパスワードの再設定をリクエストすると、ユーザーが送信したメールアドレスをキーにしてデータベースからユーザーを見つける
- 該当のメールアドレスがデータベースにある場合は、再設定用トークンとそれに対応するリセットダイジェストを生成する
- 再設定用ダイジェストはデータベースに保存しておき、再設定用トークンはメールアドレスと一緒に、ユーザーに送信する有効化用メールのリンクに仕込んでおく
- ユーザーがメールのリンクをクリックしたら、メールアドレスをキーとしてユーザーを探し、データベース内に保存しておいた再設定用ダイジェストと比較する (トークンを認証する)
- 認証に成功したら、パスワード変更用のフォームをユーザーに表示する
12.1 PasswordResetsリソース
ブランチを作成後、
rails generate controller PasswordResets new edit --no-test-framework
実行しようとすると
FATAL: Listen error: unable to monitor directories for changes.
Visit https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers for info on how to fix this.
調べてみるとよい解決策を公開されている方が。
rails consoleが起動できない時の対処法(「FATAL: Listen error」エラー編)
言われたとおりにやるとすぐ解決しました。
12.1.2 新しいパスワードの設定
12.1.3 createアクションでパスワード再設定
ここは意外と理解できる
コードとしてというよりは構造として。
12.2 パスワード再設定のメール送信
12.2.1 パスワード再設定のメールとテンプレート
12.2.2 送信メールのテスト
この辺は前章の復習に近い。全勝が理解できてれば問題ないとおもう。
12.3 パスワードを再設定する
12.3.1 editアクションで再設定
このリンクを機能させるためには、パスワード再設定フォームを表示するビューが必要です。このビューはユーザーの編集フォーム (リスト 10.2) と似ていますが、今回はパスワード入力フィールドと確認用フィールドだけで十分です。
ただし、今回の作業は少しだけ面倒な点があります。というのも、メールアドレスをキーとしてユーザーを検索するためには、editアクションとupdateアクションの両方でメールアドレスが必要になるからです。例のメールアドレス入りリンクのおかげで、editアクションでメールアドレスを取り出すことは問題ありません。しかしフォームを一度送信してしまうと、この情報は消えてしまいます。この値はどこに保持しておくのがよいのでしょうか。今回はこのメールアドレスを保持するため、隠しフィールドとしてページ内に保存する手法をとります。これにより、フォームから送信したときに、他の情報と一緒にメールアドレスが送信されるようになります。実際のコード (リスト 12.14) を見てみましょう。
↑これはわかりやすい説明。概念的には。
12.3.2 パスワードを更新する
updateアクションでは、次の4つのケースを考慮する必要があります。
- パスワード再設定の有効期限が切れていないか
- 無効なパスワードであれば失敗させる (失敗した理由も表示する)
- 新しいパスワードが空文字列になっていないか (ユーザー情報の編集ではOKだった)
- 新しいパスワードが正しければ、更新する
12.3.3 パスワードの再設定をテストする
12.4 本番環境でのメール送信 (再掲)
とくにコメントなくおわってしまった。
Author And Source
この問題について(Railsチュートリアル:12章(わからないとこメモです)), 我々は、より多くの情報をここで見つけました https://qiita.com/fumi1011/items/e81f91d9ebe7a91646bf著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .