Ruby on rails Rails 5 API+;反应+;CORS+;赫罗库+;GH页面

Ruby on rails Rails 5 API+;反应+;CORS+;赫罗库+;GH页面,ruby-on-rails,reactjs,heroku,cors,Ruby On Rails,Reactjs,Heroku,Cors,早上好 又有了一次令人头痛的时刻,可能需要帮助 我有一个React客户端使用Rails 5 API。在localhost上,一切都运行得很好,非常完美。我首先将客户端部署到GH pages,将API部署到Heroku,但无法向服务器发出post请求,我一直得到以下结果: Access to XMLHttpRequest at 'https://xxxx.herokuapp.com/auth/login' from origin 'https://xxxx.github.io' has been

早上好

又有了一次令人头痛的时刻,可能需要帮助

我有一个React客户端使用Rails 5 API。在localhost上,一切都运行得很好,非常完美。我首先将客户端部署到GH pages,将API部署到Heroku,但无法向服务器发出post请求,我一直得到以下结果:

Access to XMLHttpRequest at 'https://xxxx.herokuapp.com/auth/login' from origin 'https://xxxx.github.io' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource
同样的请求在Postman中也可以正常工作,但现在它在localhost中也被破坏了,所以我什么也做不了:-(

问题显然是CORS-我尝试了多种配置,但似乎没有任何效果,因为我一直得到完全相同的错误

我有
rack cors gem
。我的
应用程序.rb
如下所示:

config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins '*'
    resource '*', :headers => :any, :methods => :any # also tried [:get, :post, etc]
  end
end
奇怪的是,当我运行
bundle exec-rake中间件时,我在列表顶部得到了2个
use-Rack::Cors
——似乎无法找到原因

我已尝试在
application\u controller.rb中手动设置标题:

after_filter :cors_set_access_control_headers



def cors_preflight_check
    if request.method == 'OPTIONS'
      cors_set_access_control_headers
      render text: '', content_type: 'text/plain'
    end
  end

  # protected
  def cors_set_access_control_headers
    headers['Access-Control-Allow-Origin'] = '*'
    headers['Access-Control-Allow-Methods'] = 'POST, PUT, DELETE, GET, PATCH, OPTIONS'
    headers['Access-Control-Request-Method'] = '*'
    headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization, Credentials'
  end

我尝试了其他一些方法,但仍然得到了同样的错误。一些帮助将是很棒的,提前谢谢!

修复了它-我不知何故错过了非常明显的cors.rb文件,该文件的
来源设置错误

您是否有机会查看过CSRF?Rails为所有表单添加了真实性标记,以验证e请求。您需要禁用对将通过应用程序外部请求访问的特定操作的检查:
skip\u before\u操作:验证\u真实性\u令牌,:only=>[:update]
或您需要的其他操作在\u操作:验证\u请求之前,我已经得到了
skip\u,仅:%i[登录注册]
在my users\u controller.rb中,并获得相同的结果