请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问原点“null”

问题描述 投票:0回答:2

我正在尝试使用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
2个回答
0
投票

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


0
投票

我找到了一个 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-Methods'] = 'GET, POST, PUT, DELETE, 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
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
© www.soinside.com 2019 - 2024. All rights reserved.