首页 文章

在机架应用程序中使用CORS和Warden(Grape API)

提问于
浏览
2

我有一个基于Grape的API作为机架应用程序运行,使用rack-cors来允许跨源请求,使用Warden进行身份验证 . CORS按预期工作,但不是在我调用 env['warden'].authenticate 的情况下 . 在这些情况下,我收到"origin not allowed"回复 .

我相信这是由于中间件的顺序,但我对机架应用程序相对较新 . I found some information通过使用 config.middleware.insert_before Warden::Manager, Rack::Cors do ... 强制中间件的顺序来描述类似的问题以及如何在Rails中使其工作的示例,但我不知道非Rails等效 .

以下是我的 config.ru 的简化近似值:

require File.expand_path('../application', __FILE__)

use Warden::Manager do |manager|
  manager.default_strategies :password
end

use Rack::Cors do
    allow do
      origins '*'
      resource '/*', :headers => :any, :methods => [:get, :post, :options, :put]
    end
end

run application

我已经尝试交换 use 指令的顺序,但无论哪种方式,我从使用warden的方法得到相同的"origin not allowed"响应 . 我的部分问题是,我不清楚什么决定了机架应用程序中间件的顺序 .

我的预感是中间件的顺序导致这个问题可行吗?好像我错过了一些基本的东西 . 我想让机架和Warden玩得很好或找到另一种允许CORS的解决方案 . 我尝试明确发送Access-Control-Allow-Origin标头,但Warden似乎也消除了这一点 .

1 回答

  • 0

    有完全相同(相当恼人)的东西,最终在我的一个做这个:

    before do 区块,

    header 'Access-Control-Allow-Origin', '*'
    header 'Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT'
    

    (你可能想根据 RACK_ENV 调整......)

    似乎工作 . 请注意,这不是一个完整的CORS实现(of course its not),但我会等待 rack-cors gem修复...

    HTH

相关问题