今日やったこと7
Ruby on Rails チュートリアル(第4版) 第8章 基本的なログイン構造
(8.1 セッション 〜 8章最後まで)
セッション
SessionというRailsのメソッドを使って一時セッションを作成する。
UserリソースはバックエンドでUserモデルを介してデータベース上のデータにアクセスするが、Sessionリソースはcookiesを保存場所として使う。
Sessionコントローラを生成。
演習8.1.1.2で使ったパイプとgrepコマンド
パイプとは
コマンドとコマンドの間に「|」を使うことで複数のコマンドを組み合わせて使うことができる。
grepコマンド
指定したパターンにマッチする行を表示するコマンド。
ログインフォーム
SessionはActive Recordオブジェクトではない(Sessionモデルがない)のでユーザー登録フォームでform_forヘルパーを使う場合は引数にインスタンス変数ではなく、リソースの名前とそれに対応するURLを具体的に指定する必要がある。
ユーザーの検索と認証
ログインが送信されるたびに、パスワードとメールアドレスの組み合わせが有効かどうかを判断する。
認証にはUser.find_byメソッドとauthenticateメソッドを使う。
フラッシュメッセージを表示する
ユーザー登録の場合はActive Recordオブジェクトによってエラーメッセージを表示できたが、セッションではActive Recordのモデルを使っていないので自分でフラッシュメッセージを表示させる。
flashを使うとrenderメソッドでレンダリングしてもメッセージが残ったままになってしまうため、flash.nowを使う。
flash.nowのメッセージはその後リクエストが発生した時に消滅する。
ログイン
session[:user_id]を使ってユーザーIDを代入する。
sessionメソッドで作成された一時cookiesは、ブラウザを閉じた瞬間に有効期限が終了する。
ユーザーIDを一時セッションに保存できたら、そのユーザーIDを別のページで取り出すためにcurrent_userメソッドを定義する。
レイアウトリンクを修正・テストする。
ユーザー登録と同時にログインできるように修正。
ログアウト
ログアウトの処理ではセッションからユーザーIDを削除するためにdeleteメソッドを使う。