41

Rails 5.0.0.beta2 中的应用程序在尝试使用 ActionCable 时出现服务器问题。

使用 localhost:3000 可以正常工作,因为这是大多数 ActionCable 的默认设置。但是如果我尝试在端口 3001 上运行 rails 服务器,它会给我Request origin not allowed: http://localhost:3001

ActionCable 文档提到使用类似的东西ActionCable.server.config.allowed_request_origins = ['http://localhost:3001'],如果我把它放进去,它对我有用config.ru

但这似乎是一个非常奇怪的地方。我觉得它应该可以放入初始化文件或我的 development.rb 环境配置文件中。

为了进一步证明我的观点,它应该被允许进入那里,ActionCable.server.config.disable_request_forgery_protection = true即使我将它包含在 development.rb 中,该设置也可以忽略请求来源。

为什么可以ActionCable.server.config.disable_request_forgery_protection在 development.rb 中工作,但ActionCable.server.config.allowed_request_origins不能(但在 config.ru 中工作)?

这不是一个紧迫的问题,因为我有几个选项可以解决。我只是想知道我是否遗漏了一些关于我想象这应该如何工作的明显内容。

4

3 回答 3

57

你可以把 Rails.application.config.action_cable.allowed_request_origins = ['http://localhost:3001']你的 development.rb

有关更多信息,请参阅https://github.com/rails/rails/tree/master/actioncable#allowed-request-origins

于 2016-02-16T20:28:23.650 回答
3

对于我的颤振应用程序,请求来源为零。所以,需要添加nil到列表中。

我已在 中添加此代码config/environments/development.rb,并且可以正常工作!

config.action_cable.allowed_request_origins = [/http:\/\/*/, /https:\/\/*/, /file:\/\/*/, 'file://', nil]
于 2021-01-23T09:52:18.843 回答
3

从此答案中,您还可以添加以下代码config/environments/development.rb以允许来自http和的请求https

Rails.application.configure do
  # ...

  config.action_cable.allowed_request_origins = [%r{https?://\S+}]
end

config.action_cable.allowed_request_origins如文档所述,接受字符串数组或正则表达式:

Action Cable 将只接受来自指定来源的请求,这些请求作为数组传递给服务器配置。来源可以是字符串或正则表达式的实例,将对它们执行匹配检查。

下面列出的正则表达式将匹配来自任何域的httphttpsurl,因此在使用它们时要小心。使用哪一个只是偏好问题。

  • [%r{https?://\S+}]# 取自这个答案
  • [%r{http[s]?://\S+}]
  • [%r{http://*}, %r{https://*}]
  • [/http:\/\/*/, /https:\/\/*/]
于 2018-11-27T18:56:31.330 回答