読者です 読者をやめる 読者になる 読者になる

コンパイラかく語りき

文系新卒プログラマーのメモ

RubyOnRailsチュートリアル8章(前半)

Rails

どうも!chuckです。引き続き、RubyOnRailsチュートリアルをやっていきます(`・ω・´)ゞ

 

8章 サインイン、サインアウト

1,下準備

セッションとは

2つのコンピュータの間の半永続的な接続のこと。

忘却モデル:ブラウザを閉じると終了。

継続モデル:「パスワードを保存する」チェックボックスを使用してセッションを継続する。

永続モデル:明示的にサインアウトするまでセッションを継続する。

 

今回採用するのは永続モデル。

セッションをRESTfulなリソースとして作成しておくと便利。例)サインインページをnewセッションで、サインインをcreateセッションで、サインアウトをdestroyセッションで扱う、など。

Sessionsリソースではcookieを使用する。

 

しばらくの流れ:セッションコントローラ、サインイン用フォーム、そしてこれらに関連するコントローラアクションを作成する。そしてサインアウトの仕組みも作る。

 

Sessionコントローラ

サインインとサインアウトはSessionコントローラの特定のRESTアクションにそれぞれ対応している。サインインのフォームはnewアクションで処理される。(実際のサインイン処理はcreateアクションにPOSTリクエストが送信されたときに為される。そしてサインアウトはdestroyアクションにDELETEリクエストを送信されることで処理される)

※HTTPメソッドとRESTアクションの関連付け

 

コントローラと結合テストを作成。

f:id:chuck0523:20150701222311p:plain

 

何はともあれルーティング

テストを作成したのでまずはルーティングから。

前回のUsersリソース同様、resourcesメソッドを使用して通常のRESTfulなルーティングを設定できる。

f:id:chuck0523:20150701222918p:plainちなみに、via: 'delete'というのは、HTTPリクエストのDELETEリクエストによって呼び出されるということ。

 

ルーティングができたのでアクション作成

コントローラにアクションを書きます。

f:id:chuck0523:20150701223145p:plain

 

最後にビュー

f:id:chuck0523:20150701223252p:plain

これでひとまずテストはパスする。

 

 

2, 開発作業

テスト

サインイン失敗テストを書く。

f:id:chuck0523:20150701223556p:plain

alertクラスとalert-errorクラスを持つdivがあるかどうかテスト、なおかつ、エラーメッセージに”Invalid”という単語が含まれているかもテスト。

つまり以下のDOMが求められている。

f:id:chuck0523:20150701223718p:plain

 

次にサインイン成功時のテストを作成。

f:id:chuck0523:20150701224135p:plain

 

サインインの最終的なビュー

f:id:chuck0523:20150701224940p:plain

前回のユーザー登録と同じく、form_forタグを使っているところがポイント。

 

サインイン認証

f:id:chuck0523:20150701225529p:plain

paramsハッシュは以下のように:sessionキーの下に持ちます。

つまり、createアクションのparamsハッシュには認証に必要な情報が全て含まれている。

(復習)ActiveRecordがUser.find_by_emailを提供し、has_secure_passwordがauthenticateメソッドを提供している。認証に失敗したらauthenticateはfalseを返す。

 

以上のことをまとめると、以下のようになる。

f:id:chuck0523:20150701230628p:plain

ここでflash.nowというものを使っているのには理由があり、Flashの残留問題を防ぐためである(詳しくは理解できなかった(ヽ´ω`)

 

さて、長くなりそうなのでここでいったん切ります。続きはまた!では!