【84日目】【1日20分のRailsチュートリアル】【第8章】セッション永続化のために記憶トークンを生成する
今日は「8.4 [このアカウント設定を保存する]」から。
8.4 [このアカウント設定を保存する]
本節では、ユーザーログインをデフォルトで保持するように変更し、
(中略)
前者はGitHubやBitbucketで、後者はFacebookやTwitterでそれぞれ採用されています。
商用向けサイトでも使える方法を学べるのいいね。
8.4.1 記憶トークンと暗号化
本節では、セッションの永続化の第一歩として記憶トークン (remember token) を生成し、cookiesメソッドによる永続的cookiesの作成や、安全性の高い記憶ダイジェスト (remember digest) によるトークン認証にこの記憶トークンを活用します。
セッションは簡単だったけど永続的にしてセキュリティも確保しようとすると色々しないと駄目なんだな。。。
それでは最初に、必要となるremember_digest属性をUserモデルに追加します。
マイグレーションを作成してそのまま実行。
データベースにremember_digest
属性ができました。
$ rails generate migration add_remember_digest_to_users remember_digest:string
invoke active_record
create db/migrate/20161206021530_add_remember_digest_to_users.rb
$ bundle exec rake db:migrate
ここで、記憶トークンとして何を使用するかを決める必要があります。
ランダムな文字列生成にSecureRandom
モジュールのurlsafe_base64
メソッドを使うのがいいらしい。
app/models/user.rb
# ランダムなトークンを返す def User.new_token SecureRandom.urlsafe_base64 end
有効なトークンとそれに関連するダイジェストを作成できるようにします。
さっき追加したUser.new_token
を使ってトークンのダイジェストをデータベースに保存する。
app/models/user.rb
class User < ActiveRecord::Base attr_accessor :remember_token : # 永続的セッションで使用するユーザーをデータベースに記憶する def remember self.remember_token = User.new_token update_attribute(:remember_digest, User.digest(remember_token)) end end
トークンをどう使うのかしっかりイメージできてないけどこれからかな。
今日の作業時間は【29分】。
次は「8.4.2 ログイン状態の保持」から。