0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Railsチュートリアルメモ - 第12章

Last updated at Posted at 2020-03-20

メモの目次記事はこちら

公式Railsチュートリアル第12章へのリンク

サマリ

  • パスワードの再設定
    • パスワード再設定メールの送信
    • トークンによる認証とパスワードの再設定

ポイント

  • パスワードリセット機能はUserモデルを拡張して使用するため、MVCのうち新たに作成するのはViewとControllerのみで良い
  • 処理のコントローラーのアクションがいろいろ登場するので、流れを整理しないと混乱する
sessions/new.html.erb
→password_resets_controller#new
→password_resets/new.html.erb
→password_resets_controller#create
→メール送信
→password_resets_controller#edit
→password_resets/edit.html.erb
→password_resets#update
  • @user.authenticated?(:reset, params[:id])でresetトークンとDBに保存されたダイジェストを照合する
  • パスワード再設定用メールを送信する際に、パスワードリセットトークンとダイジェストを生成する。
    • トークンはメール内のリンクに埋め込んでユーザーに送付する
    • ダイジェストはDBに保存し、リンクが開かれた際に両者を照合して本人であることを確認する
  • #edit時点では、メール内のリンクに埋め込んだURLパラメーターからメールアドレスを取得できるが、#updateは画面から呼び出すので、同じ方法でメールアドレスを取得することができない。そのため、edit.html.erbの中の隠しフィールドにメールアドレスを持たせて#updateに引き渡す。
    • <%= hidden_field_tag :email, @user.email %>

感想

  • 11章と内容的にはほぼ同じだったが、その分説明が少なくて少し混乱した
  • herokuでの動作は問題なかったが、ローカル動作時にパスワード再設定用リンクを開こうとすると画面にこのサイトは安全に接続できませんlocalhostから無効な応答が送信されました。と表示され、ログに以下が吐かれてしまった
2020-03-18 02:53:45 +0900: HTTP parse error, malformed request (): #<Puma::HttpParserError: Invalid HTTP format, parsing fails.>
  • 原因はメールリンクがhttpsになっているためで、httpでリンクを開くと画面が正常に表示された
    • localhostにhttpsで繋ぐ場合は少し追加の設定が必要 参考記事
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?