たくろぐ!

世界一のチラ裏

8.2 ログイン

目次

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メソッドでログイン状態にする。