質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

2267閲覧

ECサイトのゲストユーザーをredisを使って管理するロジックを教えてください

dialbird

総合スコア379

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

3クリップ

投稿2017/06/16 12:59

編集2017/06/16 23:16

現在ECサイトを作ろうとしていて、ゲストユーザーの扱いについて苦戦しています。

実現したいこととしては

  • ログインしていなくても買い物ページへ行けて、カートに商品を入れたり減らしたりできる。
  • 決済する段になったら、ログインしていなければログインする

ということです。

いろいろ調べてみて、おそらくゲストユーザー・ログインユーザーに関係なく、セッションにカートのIDを期限付きで保持しておくことで、実現できそうだなとは思い始めてきました。

しかし問題は、protect_from_forgery用のセッションとは別にトークンを作ったほうがいいかよくわかっていないということです

私は今railsのセッションをredisで管理しています

ruby

1# config/environments/development.rb 2 3config.session_store :redis_store, { 4 key: 'session_id', 5 servers: { 6 host: 'localhost', 7 port: 6379, 8 db: 0, 9 namespace: 'sessions' 10 }, 11 expire_after: 10.minutes 12 }

これをしないとprotect_from_forgeryに引っかかってしまうので…

そしてこの設定をしているので、すでに接続したときにはこのトークンがcookiesに入っています。

質問というのは

・このトークンはあくまでもデフォルトのものだからほかの用途につかうべきではないのか?
・もし使えるのならば、このトークンをどのように活用していけばいいのか(protect_from_forgeryがほとんど勝手にやってくれてる仕様なので、活用の仕方がよくわからない)

ということです

よろしくお願いいたします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

私の理解が中途半端だったようです。
一応ゲストカートの実装はできた(?)と思うので私の所感を

request_from_forgeryのcookieパラメーターは、あくまでもpostなどの通信用のセキュリティを守るためのものとして割り切り、それとは別にguest_tokenというcookieを作って使うようにしました。

guest_tokenはrequest_from_forgeryの直後にbefore_actionで設定するようにしました。
guest_tokenに入れる中身にはSecureRandom.urlsafe_base64というメソッドを使いました。

正しいかどうかはわかりませんが、とりあえずこれでいこうと思います
ありがとうございました

投稿2017/06/19 00:09

dialbird

総合スコア379

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

1つの案ですけど、ハッシュの中にハッシュ作るみたいな形で入れとけば扱いやすそうだなと思いました

キーとかはセッションとかで持っとくとかですかね

適当なキーに対して valueは
{ key: articles{
id:12,
id:56
}
}

こんな感じで待たせといて
セッションが持ってるキーに対してarticleのidをぶら下げとくとか

idだけじゃなくてタイトルとかも入れといても良いかも

投稿2017/06/16 19:13

drizzing20

総合スコア363

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dialbird

2017/06/16 21:35

drizzing20さん ご返答ありがとうございます! articleというのがカートに対応しているという判断でよろしいのでしょうか? キーは一つだけで、それに対して複数のカートのIDを格納するということでしょうか?
drizzing20

2017/06/16 22:03 編集

うーん、ややこしいですね カート????のキーはセッションやらparamsに保持させとく #1人のゲストユーザーにつき、カートは一台あれば良いので 複数のカートのidを持つ必要はないと思います そのゲストユーザーのカートの中に商品を入れて行けば良いのでバリューには商品のidを複数追加していく まとめると、キーにはカートのidを バリューには商品のidを入れていけば良いのではということです! articleとか全然関係ないモデル出して複雑になりましたすいません!
dialbird

2017/06/16 23:17

いえいえとんでもないです。 質問の内容をより具体的に変えたので、もしお時間があればお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問