読者です 読者をやめる 読者になる 読者になる

ぞえの技術めも

Ruby on Rails勉強中

【85日目】【1日20分のRailsチュートリアル】【第8章】記憶トークンとユーザーIDをcookiesに保存する

Ruby on Railsチュートリアル(第3版)

今日は「8.4.2 ログイン状態の保持」から。

8.4.2 ログイン状態の保持

個別のcookiesは、ひとつのvalue (値) と、オプションのexpires (有効期限) からできています。

valueには記憶トークンの値を設定すればいいらしい。

また、cookiesの有効期限を20年後に設定するのははよく使われる手法とのこと。
Railsには20年後に期限切れになるcookiesを設定できるpermanentメソッドがあるそう。へ~。

cookies.permanent[:remember_token] = remember_token

次はユーザーIDをcookiesに保存。
sessionメソッドを同じ感じにすると下記の通り。

cookies[:user_id] = user.id

しかしこのままではIDが生のテキストとしてcookiesに保存されてしまうので、アプリケーションのcookiesの形式が見え見えになってしまい、(中略)
これを避けるために、署名付きcookieを使用します。

署名付きcookieにはsignedメソッドを使う。

cookies.signed[:user_id] = user.id

これにさっきの有効期限20年cookiesを設定できるpermanentメソッドを追加するとこうなる。

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

cookiesを設定すると、以後のページのビューで以下のようにしてcookiesからユーザーを取り出せるようになります。

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

ふーむ、cookies.signed[:user_id]でユーザーIDのcookiesの暗号が解除されるらしい。

記憶トークンとユーザーIDをcookiesに保存する方法を学習した。
色々読み込んでたら時間かかったので今日はここまで。

今日の作業時間は【20分】

次は「8.4.2 ログイン状態の保持」のトークンが記憶ダイジェストと一致するか確認するところから。