不允许请求源:http:// localhost:3001使用Rails5和ActionCable时

时间:2016-02-03 22:21:03

标签: ruby-on-rails ruby-on-rails-5 actioncable

在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中有效)?

这不是一个紧迫的问题,因为我有几种选择作为解决方法。我只是想知道我是否错过了一些关于我认为这应该如何工作的明显内容。

3 个答案:

答案 0 :(得分:51)

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

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

答案 1 :(得分:2)

您还可以从this answerconfig/environments/development.rb添加以下代码,以允许来自httphttps的请求:

Rails.application.configure do
  # ...

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

config.action_cable.allowed_request_origins接受字符串或正则表达式数组作为documentation states

  

动作电缆将仅接受来自指定来源的请求,   作为数组传递到服务器配置。起源可以是   字符串或正则表达式的实例,要对其进行检查   比赛将会进行。

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

  • [%r{https?://\S+}]#取自this answer
  • [%r{http[s]?://\S+}]
  • [%r{http://*}, %r{https://*}]
  • [/http:\/\/*/, /https:\/\/*/]

答案 2 :(得分:0)

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

我已在 config/environments/development.rb 中添加了此代码,并且有效!

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