【问题标题】:Rails CORS issue with Ajax API endpoint RequestRails CORS 问题与 Ajax API 端点请求
【发布时间】:2017-07-18 17:24:09
【问题描述】:

我似乎在向 API 端点发出 GET 请求时遇到了一些问题。我知道 Rails 在幕后有一些安全措施。我正在使用 React-Rails 并在我的 componentDidMount 中对 API 端点进行 ajax 调用。我也在我的标题中传递了X-Auth-Token

我的控制台错误:

XMLHttpRequest 无法加载“/api/end/point...”对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'http://localhost:3000' 不允许访问。响应的 HTTP 状态代码为 401。

我的 ajax 调用看起来像

$.ajax({ url: "my/api/endpoint...", headers: {"X-Auth-Token": "My API token..."},
    success: (response) => { console.log(response); } })

【问题讨论】:

    标签: ruby-on-rails ruby ajax react-rails


    【解决方案1】:

    因为您的前端会从任何来源(任何客户端)发出请求,所以您必须从任何来源启用 CORS。试试

    # config/initializers/cors.rb
    Rails.application.config.middleware.insert_before 0, Rack::Cors do
      allow do
        origins '*'
        resource '*',
          headers: :any,
          methods: [:get, :post, :put, :patch, :delete, :options, :head]
      end
    end
    

    我在 rails 5 api 应用程序中使用它。在 rails 5 之前,将 rack-cors gem 添加到您的 Gemfile。不管怎样,重启你的服务器。

    轨道 3/4

    # config/application.rb
    module YourApp
      class Application < Rails::Application
    
        config.middleware.insert_before 0, "Rack::Cors" do
          allow do
            origins '*'
            resource '*', :headers => :any, :methods => [:get, :post, :options]
          end
        end
      end
    end
    

    【讨论】:

    • 感谢 Ursus,我添加了 rack-cors gem 和您在上面描述的代码,但仍然没有运气。如果这在我的 application_controller 中很重要,我也有我的protect_from_forgery::null_session。有什么想法我可能做错了吗?
    • 我更新了我对 rails 3/4 的回答。试试这个并重启你的服务器。
    • 我正在使用rails 5,并在重新启动服务器时尝试了两种方式,但仍然没有运气。我进入控制台:“XMLHttpRequest 无法加载api/end/point...(my api 端点)对预检请求的响应未通过访问控制检查:请求的资源上不存在'Access-Control-Allow-Origin'标头。来源'@987654322 @' 因此不允许访问。响应的 HTTP 状态代码为 401。”谢谢!
    • 真是个奇怪的人。我在这么多 rails 5 api 应用程序中都有这个配置。我想你已经重启了你的服务器。
    猜你喜欢
    • 1970-01-01
    • 2019-12-03
    • 2016-09-12
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多