使用Rails5和ActionCable时,出现“请求来源不允许:http://localhost:3001”的错误。

42
在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文件中可以解决问题,但这似乎不太合适。因为像这样的设置应该放在initializer文件或development.rb环境配置文件中,而且在development.rb中包含“ActionCable.server.config.disable_request_forgery_protection=true”目前有效,但“ActionCable.server.config.allowed_request_origins”无效。虽然有一些替代方案,但我仍想知道是否我对它的工作原理有所遗漏。
3个回答

59

6

我的Flutter应用程序,请求来源为空。因此,需要在列表中添加nil

我已经在config/environments/development.rb中添加了这段代码,并且它起作用了!

config.action_cable.allowed_request_origins = [/http:\/\/*/, /https:\/\/*/, /file:\/\/*/, 'file://', nil]

4

这个答案中,您还可以添加以下代码到config/environments/development.rb,以允许来自httphttps的请求:

Rails.application.configure do
  # ...

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

config.action_cable.allowed_request_origins 接受一个字符串或正则表达式的数组,就像文档中所述:

Action Cable只会接受来自特定来源的请求,这些请求通过一个数组传递给服务器配置。 源可以是字符串或正则表达式实例,针对匹配项将执行检查。

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

  • [%r{https?://\S+}] # 参考此答案
  • [%r{http[s]?://\S+}]
  • [%r{http://*}, %r{https://*}]
  • [/http:\/\/*/, /https:\/\/*/]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接