質問: 現在ECサイトを作ろうとしていて、ゲストユーザーの扱いについて苦戦しています。 実現したいこととしては * ログインしていなくても買い物ページへ行けて、カートに商品を入れたり減らしたりできる。 * 決済する段になったら、ログインしていなければログインする ということです。 いろいろ調べてみて、おそらくゲストユーザー・ログインユーザーに関係なく、セッションにカートのIDを期限付きで保持しておくことで、実現できそうだなとは思い始めてきました。 しかし問題は、protect_from_forgery用のセッションとは別にトークンを作ったほうがいいかよくわかっていないということです 私は今railsのセッションをredisで管理しています ``` # config/environments/development.rb config.session_store :redis_store, { key: 'session_id', servers: { host: 'localhost', port: 6379, db: 0, namespace: 'sessions' }, expire_after: 10.minutes } ``` これをしないとprotect_from_forgeryに引っかかってしまうので... そしてこの設定をしているので、すでに接続したときにはこのトークンがcookiesに入っています。 質問というのは ・このトークンはあくまでもデフォルトのものだからほかの用途につかうべきではないのか? ・もし使えるのならば、このトークンをどのように活用していけばいいのか(protect_from_forgeryがほとんど勝手にやってくれてる仕様なので、活用の仕方がよくわからない) ということです よろしくお願いいたします
回答: 私の理解が中途半端だったようです。 一応ゲストカートの実装はできた(?)と思うので私の所感を request_from_forgeryのcookieパラメーターは、あくまでもpostなどの通信用のセキュリティを守るためのものとして割り切り、それとは別にguest_tokenというcookieを作って使うようにしました。 guest_tokenはrequest_from_forgeryの直後にbefore_actionで設定するようにしました。 guest_tokenに入れる中身にはSecureRandom.urlsafe_base64というメソッドを使いました。 正しいかどうかはわかりませんが、とりあえずこれでいこうと思います ありがとうございました