这是场景。我正在将 ActionCable 用于一个站点(我们称之为www.example.com
)。它在开发中完美运行,但是一旦我将它推送到 Heroku,我就会收到 WebSocket 连接的 302 错误。
问题似乎源于我让 Heroku 使用自定义域这一事实。因此,如果我将 WebSocket 指向wss://example.com
,它会给我一个 302,我假设是因为它被重定向到example.herokuapp.com
url?
所以鉴于这个问题,我被迫将 WebSocket 连接指向wss://example.herokuapp.com
. 我现在遇到的问题是,因为它本质上是我指向的一个新域,所以来自 example.com 的 cookie 不与example.herokuapp.com
. 这意味着example.herokuapp.com
正在传递一个空白 cookie,该 cookie 实际上是在我用于身份验证的 example.com 上设置的。
我通过记录未签名的cookie(只是暂时未签名以进行测试,不要担心安全性)并在example.herokuapp.com
服务器上设置该cookie来验证这是问题所在。之后它工作得很好。
显然,我不能让某人去这两个网站只是为了设置一个该死的 cookie...
我希望找到一种方法来解决原始问题,并能够将 WebSocket 指向我的自定义域,wss://example.com
而不必担心 cookie 签名问题。这可能吗?
example.herokuapp.com
如果没有,在域上设置 cookie 的最佳方法是什么?
PS 是的,我查看了有关 ActionCable 和 Heroku 的其他 SO 问题,但似乎没有一个涉及自定义域。这个讨论了一种 cookie 解决方法,但我觉得它不适用于这种情况,因为它们不是相同的子域:Deploying Ruby on Rails app to Heroku while using Action Cable (Puma port listener)
感谢您花时间帮助我:)
[编辑] 这里似乎与这个问题非常相似,但我得到的是 302 而不是 503。Heroku 错误 503,多个域上的 webSockets