###rails tutorial 9章 9.1.2節
rails tutorial 9.1.2節のリスト9.6に記述されている、
authenticated?
メソッドについて質問させていただきます。
model
1class User < ApplicationRecord 2 attr_accessor :remember_token 3 4# 渡された文字列のハッシュ値を返す 5 def User.digest(string) 6 cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : 7 BCrypt::Engine.cost 8 BCrypt::Password.create(string, cost: cost) 9 end 10 11 # ランダムなトークンを返す 12 def User.new_token 13 SecureRandom.urlsafe_base64 14 end 15 16 # 永続セッションのためにユーザーをデータベースに記憶する 17 def remember 18 self.remember_token = User.new_token 19 update_attribute(:remember_digest, User.digest(remember_token)) 20 end 21 22 # 渡されたトークンがダイジェストと一致したらtrueを返す 23 def authenticated?(remember_token) 24 BCrypt::Password.new(remember_digest).is_password?(remember_token) 25 end
ここではcookieを使ったユーザーの照合のために
User.new_token
メソッドで生成したトークンを、
User.digest(string)
メソッドでハッシュ化し、
remember
メソッドでデータベースのremember_digestカラムに保存しています。
この流れで生成されたremember_digestとremember_tokenを照合して
ユーザー認証を行うと考えているのですが、
だとするとauthenticated?
メソッドはどんな役割があるのでしょうか。
解説ではtokenとdigestを照合し、一致すればtrueを返すとありますが、
メソッド内のremember_tokenはローカル変数であり、userインスタンスとは全く関係が無いように思えます。
どなたか解説をお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/11 13:47