どうも!chuckです。引き続き、RubyOnRailsチュートリアルをやっていきます(`・ω・´)ゞ
8章 サインイン、サインアウト
1,下準備
セッションとは
2つのコンピュータの間の半永続的な接続のこと。
忘却モデル:ブラウザを閉じると終了。
継続モデル:「パスワードを保存する」チェックボックスを使用してセッションを継続する。
永続モデル:明示的にサインアウトするまでセッションを継続する。
今回採用するのは永続モデル。
セッションをRESTfulなリソースとして作成しておくと便利。例)サインインページをnewセッションで、サインインをcreateセッションで、サインアウトをdestroyセッションで扱う、など。
Sessionsリソースではcookieを使用する。
しばらくの流れ:セッションコントローラ、サインイン用フォーム、そしてこれらに関連するコントローラアクションを作成する。そしてサインアウトの仕組みも作る。
Sessionコントローラ
サインインとサインアウトはSessionコントローラの特定のRESTアクションにそれぞれ対応している。サインインのフォームはnewアクションで処理される。(実際のサインイン処理はcreateアクションにPOSTリクエストが送信されたときに為される。そしてサインアウトはdestroyアクションにDELETEリクエストを送信されることで処理される)
※HTTPメソッドとRESTアクションの関連付け
コントローラと結合テストを作成。
何はともあれルーティング
テストを作成したのでまずはルーティングから。
前回のUsersリソース同様、resourcesメソッドを使用して通常のRESTfulなルーティングを設定できる。
ちなみに、via: 'delete'というのは、HTTPリクエストのDELETEリクエストによって呼び出されるということ。
ルーティングができたのでアクション作成
コントローラにアクションを書きます。
最後にビュー
これでひとまずテストはパスする。
2, 開発作業
テスト
サインイン失敗テストを書く。
alertクラスとalert-errorクラスを持つdivがあるかどうかテスト、なおかつ、エラーメッセージに”Invalid”という単語が含まれているかもテスト。
つまり以下のDOMが求められている。
次にサインイン成功時のテストを作成。
サインインの最終的なビュー
前回のユーザー登録と同じく、form_forタグを使っているところがポイント。
サインイン認証
paramsハッシュは以下のように:sessionキーの下に持ちます。
つまり、createアクションのparamsハッシュには認証に必要な情報が全て含まれている。
(復習)ActiveRecordがUser.find_by_emailを提供し、has_secure_passwordがauthenticateメソッドを提供している。認証に失敗したらauthenticateはfalseを返す。
以上のことをまとめると、以下のようになる。
ここでflash.nowというものを使っているのには理由があり、Flashの残留問題を防ぐためである(詳しくは理解できなかった(ヽ´ω`)
さて、長くなりそうなのでここでいったん切ります。続きはまた!では!