LoginSignup
0
0

More than 3 years have passed since last update.

Rails チュートリアル 第9章 学習内容のメモ

Posted at

本章の趣旨

  • 8章で実装した基本的なログイン機能に加えて、ラウザを再起動した後でもすぐにログインできる機能 (remember me) を実現する

9.1 Remember me 機能

  • 8章ではsessionメソッドを用いてcookieにユーザIDを保存したが、sessionメソッドではブラウザを閉じるとデータが消えてしまう
  • 永続的なcookieを作成するために、cookiesメソッドを用いて記憶トークンを作成する
  • データベースの情報を抜き取られた場合に備えて、記憶トークンはハッシュ化してデータベースに保存する
  • トークン生成用メソッドの追加
app/models/user.rb
  def User.new_token
    SecureRandom.urlsafe_base64
  end
  • ハッシュ化したトークンをデータベースに保存する
app/models/user.rb
  def remember
    self.remember_token = User.new_token
    update_attribute(:remember_digest, User.digest(remember_token))
  end
  • cookiesメソッドでは有効期限を設定できる
  • Railsでは20年で期限切れになるcookies設定を行うための特別なメソッドが用意されている

cookies.permanent[:remember_token] = remember_token

  • ユーザIDをcookieに保存する。IDが見られることを防ぐために署名つきcookieを使用する

cookies.signed[:user_id] = user.id

  • 記憶トークンと同じく、ユーザIDも永続化させる必要があるためsignedとpermanentをメソッドチェーンで繋ぐ

cookies.permanent.signed[:user_id] = user.id

  • 以下のようにcookiesからユーザを取り出せるようになる

User.find_by(id: cookies.signed[:user_id])

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0