これがシナリオです。サイトに ActionCable を使用しています ( と呼びましょうwww.example.com
)。開発では完璧に動作しますが、Heroku にプッシュすると、WebSocket 接続で 302 エラーが発生します。
この問題は、Heroku でカスタム ドメインを使用していることが原因のようです。このため、WebSocket を にポイントすると、302 が表示されます。これは、 URLwss://example.com
にリダイレクトされているためだと思いますか?example.herokuapp.com
したがって、この問題を考慮して、代わりに WebSocket 接続をwss://example.herokuapp.com
. 私が今直面している問題は、それが基本的に私が指摘している新しいドメインであるため、example.com からの Cookie が と共有されないことexample.herokuapp.com
です。これはexample.herokuapp.com
、認証に使用する example.com で実際に設定されている空白の Cookie を渡していることを意味します。
署名されていないCookieをログに記録し(テストのために一時的に署名されていないだけで、セキュリティについて心配しないでください)、example.herokuapp.com
サーバーにそのCookieを設定することで、これが問題であることを確認しました。その後、見事に機能しました。
明らかに、ひどいクッキーを設定するためだけに誰かに両方のサイトにアクセスさせることはできません...
私が望んでいるのは、元の問題を修正する方法を見つけて、WebSocket を私のカスタム ドメインに向けることができ、wss://example.com
Cookie 署名の問題を心配する必要がないことです。これは可能ですか?
example.herokuapp.com
そうでない場合、ドメインに Cookie を設定する最良の方法は何ですか?
PS はい、ActionCable と Heroku に関する他の SO の質問を見てきましたが、カスタム ドメインを扱っているものはないようです。これは Cookie の回避策について述べていますが、これらは同じサブドメインではないため、このシナリオでは機能しないと思います: Action Cable を使用しながら Ruby on Rails アプリを Heroku にデプロイする (Puma ポート リスニング)
私を助けるために時間を割いてくれてありがとう:)
[編集] ここでこの質問に非常に似ているようですが、503 ではなく 302 が返されます。Heroku エラー 503、複数のドメインの webSockets