【问题标题】:No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问
【发布时间】:2018-02-20 16:59:51
【问题描述】:

我正在尝试使用 omniauth 将我的客户定向到外部服务授权页面。我的客户端使用 ember.js,我的服务器是 rails 服务器。就目前情况而言,我可以在服务器端拨打电话几乎没有问题,但我的客户端不会重定向,导致我阅读时出错

Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 404.

做一些研究表明我需要使用我已经安装和配置的 CORS。现在我只需要知道在哪里以及如何将access-control-allow-origin 标头应用于我的代码。谁能帮我解决这个问题?

我的路线:

get 'auth/:provider/callback' => 'sessions#create'

我的会话控制器:

class SessionsController < ApplicationController
  def create
    @request.env
    auth = request.env['omniauth.auth']
    Account.recieve_donation(auth)
  end
end

【问题讨论】:

    标签: ruby-on-rails ember.js cors omniauth access-control


    【解决方案1】:

    这是你必须做的 如果你发出 GET 请求,你的客户端请求必须发送 Origin header 然后你的服务器必须发送 Access-Control-Allow-响应中的原始标头这两个标头的值必须相同才能允许跨源资源共享

    【讨论】:

    • 在哪里添加Origin 标头客户端和Access-Control-Allow-Origin 标头服务器端?它们究竟应该是什么?如果我能够开始请求阶段,是否意味着我已经很好 re:Access-Control-Allow-Origin 服务端了?
    • 我不使用 Ember 和 rails,但是在所有语言和前端框架中,当您发出 get 请求时,您可以在请求中指定一些额外的标头,类似地在 rails 中您可以在发送时设置标头响应。
    • 嗯,所以现在这实际上只是一个语法问题。您将如何在您熟悉的前端框架/后端 MVC 框架中执行此操作?我想这至少会为我指明正确的方向。
    • 在 AngularJS 中我们将其设置为 $http.get('www.google.com/someapi', { headers: {'Origin': 'abc.com'} });在后端使用 Node.js var options = { url: 'api.github.com/repos/request/request', headers: { 'Access-Control-Allow-Origin': 'abc.com' } };
    • 检查 Ember 和 Rails 如何在请求和响应中设置标头
    【解决方案2】:

    我找到了一个 ruby​​ gem Rack CORS Middleware 来解决“Access-control-allow-origin”标头问题。


    如果您不想使用 ruby​​ gem,请在您的控制器中添加以下代码(application_controller, other_name_controller)

        before_action :allow_cross_domain_access
    after_action :cors_set_access_control_headers
    
    def allow_cross_domain_access
        headers['Access-Control-Allow-Origin'] = '*'# http://localhost:9000
        headers['Access-Control-Allow-Headers'] = 'GET, POST, PUT, DELETE, OPTIONS'
        headers['Access-Control-Allow-Methods'] = %w{Origin Accept Content-Type X-Requested-With X-CSRF-Token}.join(',')
        headers['Access-Control-Max-Age'] = '1728000'
    end
    def cors_set_access_control_headers
            headers['Access-Control-Allow-Origin'] = '*'
            headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
            headers['Access-Control-Allow-Headers'] = %w{Origin Accept Content-Type X-Requested-With X-CSRF-Token}.join(',')
            headers['Access-Control-Max-Age'] = "1728000"
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-09
      • 2014-03-13
      • 2016-05-27
      • 2018-07-06
      • 2013-12-24
      • 2018-10-23
      • 2017-07-17
      • 2017-02-04
      相关资源
      最近更新 更多