迷い人

日々勉強。勉強の先に何か見つかるといいなぁ

【回答】remember meの実装について

問題

remember me(ブラウザを再起動した後でもログインした状態から始められる)機能の実装方法、クッキーの仕組みも含めて説明して下さい。

 

 

回答

以下の流れでremember me機能を実装します。

 

  • base64の文字列等で記憶トークンを作成する。
  • 作成した記憶トークンはユーザIDと共にクッキーとしてブラウザに保存する。
  • 記憶トークンから記憶ダイジェストを作成する。
  • 作成した記憶ダイジェストはDBに保存する。
  • cookie[:user_id]の値を確認し、記憶トークンと記憶ダイジェストを比較することで、ログイン状態を実現する。

 

記憶トークンと記憶ダイジェストを作成し、それぞれ保存するときのイメージ図

f:id:oyaoya1123:20200114001057p:plain

 

保存されたクッキーから記憶トークンと記憶ダイジェストを比較して、ログイン状態を実現するときのイメージ図

f:id:oyaoya1123:20200114001116p:plain

 

補足

通常のログイン状態はsession[:user_id]からユーザIDを取り出して実現している。セッションがない時にクッキーからユーザIDを取り出す。

 

参考

oyaoya1123.hatenablog.com