目次
8.2.1 log_inメソッド
8.2.2 現在のユーザー
8.2.3 レイアウトリンクを変更する
8.2.4 レイアウトの変更をテストする
8.2.5 ユーザー登録時にログイン
8.2.1 log_inメソッド
ここでは正常にログインできることを想定してcontrollerを定義している。
session[:user_id] = user.id
はsessionメソッドでブラウザ上のcookiesに暗号化されたユーザIDを保存している。
これはsessionメソッドでのセッション保存方法で、ブラウザを閉じると消えてしまう。
これを「一時セッション」と呼ぶことが多い。
紛らわしいが、逆にcookiesメソッドによるセッションの場合、「永続的セッション」と呼ぶ。
永続的セッションの場合は常にセキュリティリスクがつきまとう。
8.2.2 現在のユーザー
ここでは現在のユーザ情報を取得するメソッドをcurrent_userにてSessionHelperで定義している。
これによって様々な場面でソースコードの簡略化が期待できる。
8.2.3 レイアウトリンクを変更する
8.2.2に続いて、SessionHelperにてlogged_inメソッドを定義している。
ログインしているときには、Profile、Setting、Log outのボタン、
ログインしていないときには、Log inのボタンを表示するようにviewで切り替えするようにしている。
8.2.4 レイアウトの変更をテストする
passwordからpassword_digestを生成するために、digestメソッドを定義する。
cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost BCrypt::Password.create(string, cost: cost)
さらにfixtureを使ったユーザデータへのアクセスも行なっている。
fixtureを利用したテスト
def setup @user = users(:michael) end
今までのテスト
def setup @user = User.new(name: michael) end
8.2.5 ユーザー登録時にログイン
session#createでPOST /loginでログイン成功したときにそのユーザをlog_inメソッドでログイン状態にする。