Hitsuji_monのブログ~ 村上春樹のあれ ~

文学好きな組み込み系エンジニア

【#100DaysOfCode】Day27「Railsチュートリアル」8章,9章

Railsチュートリアル」 8章 基本的なログイン機構

7章と8章の違い

  • 7章
    • ユーザー登録フォーム
    • form_forヘルパーを使い、ユーザーのインスタンス変数@userを引数にとる
<%= form_for(@user) do |f| %>
  .
  .
  .
<% end %>
  • 8章
    • セッションフォーム
    • HTTPSはその場限りで忘れるプロトコル。一つ上の階層のcookieが情報を覚えている

セッションフォームとユーザー登録フォームの最大の違いは、セッションにはSessionモデルというものがなく、
そのため@userのようなインスタンス変数に相当するものもない点です。
したがって、新しいセッションフォームを作成するときには、form_forヘルパーに追加の情報を独自に渡さなければなりません。

form_for(@user)

Railsでは上のように書くだけで、「フォームのactionは/usersというURLへのPOSTである」と自動的に判定しますが、セッションの場合はリソースの名前とそれに対応するURLを具体的に指定する必要があります2。

form_for(:session, url: login_path)


テストはいつ行うのか
統合テストの原則:

  • 動作の仕様がまだ固まりきっていない場合、アプリケーションのコードを先に書き、期待する動作を「後で」書く

1. ログイン用のパスを開く
2. 新しいセッションのフォームが正しく表示されたことを確認する
3. わざと無効なparamsハッシュを使ってセッション用パスにPOSTする
4. 新しいセッションのフォームが再度表示され、フラッシュメッセージが追加されることを確認する
5. 別のページ (Homeページなど) にいったん移動する
6. 移動先のページでフラッシュメッセージが表示されていないことを確認する



Railsチュートリアル」 9章 ログイン情報の記憶


remember 機構(チェックボックスのやつ)を使って、ログイン情報を記憶する


ログイン情報の記憶

  • Railsでは、あるページから別のページに移動するときに状態を保持することができる。
    • ページの状態を長期間保持したいときは、cookiesメソッドを使って永続的なセッションにする
  • 記憶トークンと記憶ダイジェストをユーザーごとに関連付けて、永続的セッションが実現できる
  • cookiesメソッドを使うと、ユーザーのブラウザにcookiesなどを保存できる
  • ログイン状態は、セッションもしくはクッキーの状態に基づいて決定される
  • セッションとクッキーをそれぞれ削除すると、ユーザーのログアウトが実現できる