【回答】remember meの実装について
問題
remember me(ブラウザを再起動した後でもログインした状態から始められる)機能の実装方法、クッキーの仕組みも含めて説明して下さい。
回答
以下の流れでremember me機能を実装します。
- base64の文字列等で記憶トークンを作成する。
- 作成した記憶トークンはユーザIDと共にクッキーとしてブラウザに保存する。
- 記憶トークンから記憶ダイジェストを作成する。
- 作成した記憶ダイジェストはDBに保存する。
- cookie[:user_id]の値を確認し、記憶トークンと記憶ダイジェストを比較することで、ログイン状態を実現する。
記憶トークンと記憶ダイジェストを作成し、それぞれ保存するときのイメージ図
保存されたクッキーから記憶トークンと記憶ダイジェストを比較して、ログイン状態を実現するときのイメージ図
補足
通常のログイン状態はsession[:user_id]からユーザIDを取り出して実現している。セッションがない時にクッキーからユーザIDを取り出す。
参考