Ruby on Rails 9章序盤 remember

投稿者: | 2019年8月7日

Ruby on Rails 9章序盤 rememberをやりました。

〇remember me
-> 永続クッキー

振り返り
session[:user_id] = user_id
これはsessionメソッドを使ったもので、後ろではcookieが焼かれるが、ブラウザを閉じたらもう終わり。

〇新しくやること
・passwordのダイジェストと同じ要領で,rememberトークンのダイジェストを持つ。
・rememberトークンをcookieを焼いてブラウザに食わせる。
・rememberトークンをhashして、rememberトークンのダイジェストが取れれば認証。

rails generate migration add_remember_dist_to_users remember_digest:string

ruby on rails tutorialで、「ユーザーの暗号化済のID」と言っているやつは、「署名付きのid」であり、トークンのダイジェストとは別。

「署名付きのid」と「rememberトークン」のペアを、

有効期限とともに保存するのが今回の範囲。

〇パスワードを思い出せ
(モデルにはもたない)仮想のパスワード属性と、
データベース上のパスワードダイジェスト
という関係。

あの時はhas_secure_passwordで作った。←モデルに書いてるよ
(※password_digestという項目がある状態なら,password, password_confirmationが使えるんだった)

今回はパスワードじゃないから自分で定義する。

#モデルに追加
#仮想的な属性を追加
attr_accessor :remember_token

def remember
self.remember_token = ‘トークンを設定’
update_attribute(:remember_digest, ‘トークンのダイジェスト’)
end
#update_attributeだとパスワードの入力いらない。

〇核心

・焼く
cookies.permanent[:remember_token] = remember_token
cookies.permanent.signed[:user_id] = user.id

※permanentは20年後に有効期限を設定する。

・読む
cookies.signed[:user_id] →non signedなユーザidが取れる。
cookies[:remember_token]

・判定
BCrypt::Password.new(‘ダイジェスト’).is_password?(‘トークン’)

コメントを残す

メールアドレスが公開されることはありません。