前提・実現したいこと
Rails Tutorialの9章の、session復元の部分についての質問です。
Rails Tutorial 9.1.2ログイン状態の保持
---app/models/user.rb--- def authenticated?(remember_token) BCrypt::Password.new(remember_digest).is_password?(remember_token) end
はどのような動きをしているか教えてください。
上記部分のis_password?
は ==
と同じ動きをするので、
---app/models/user.rb--- def authenticated?(remember_token) BCrypt::Password.new(remember_digest) == (remember_token) end
と同じ動作になります。
remember_digest
は以下のように、生成されてハッシュ化されてデータベースに保存されたtokenと理解しています。
---user.rb--- def User.new_token SecureRandom.urlsafe_base64 end def remember self.remember_token = User.new_token self.update_attribute(:remember_digest, User.digest(remember_token)) end
---schema.rb--- create_table "users", force: :cascade do |t| t.string "name" ... t.string "remember_digest" end
remember_token
は以下でクッキーに入れられた平文の値だと認識しています。
def remember(user) user.remember cookies.permanent.signed[:user_id] = user.id cookies.permanent[:remember_token] = user.remember_token end
この私の認識では、以下は「ハッシュ化されたtokenをさらにBCryptでハッシュ化したtoken」と「平文のtoken」を比較するように見えてしまいます。
この認識は間違ってますでしょうか?
---app/models/user.rb--- def authenticated?(remember_token) BCrypt::Password.new(remember_digest).is_password?(remember_token) end
それとも Password.new(remember_digest)
は remember_token(ハッシュ化したtoken)からハッシュ化前のtokenに戻す、という動作になるのでしょうか?
(ハッシュは基本的に不可逆という認識です)
ご教授よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー