首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rack应用程序中使用CORS和Warden (葡萄API)

在rack应用程序中使用CORS和Warden (葡萄API)
EN

Stack Overflow用户
提问于 2013-08-05 05:18:43
回答 1查看 1.1K关注 0票数 2

我有一个基于葡萄的应用程序接口作为机架应用程序运行,使用rack-cors允许跨域请求,使用Warden进行身份验证。CORS按预期工作,但在我调用env['warden'].authenticate的情况下不是这样。在这些情况下,我得到一个"origin not allowed“响应。

我相信这是由于中间件的顺序,但我对机架应用程序相对较新。I found some information描述了一个类似的问题,并举例说明了如何在Rails中通过使用config.middleware.insert_before Warden::Manager, Rack::Cors do ...强制中间件的顺序来实现这一点,但我不知道非Rails的等价物。

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

代码语言:javascript
复制
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“响应。我的部分问题是,我不清楚是什么决定了机架应用程序中中间件的顺序。

我的预感是中间件的顺序导致这个问题是可行的吗?看起来我遗漏了一些基本的东西。我想让rack-cors和Warden玩得更好,或者找到另一个解决方案来支持CORS。我试图显式地发送Access-Control-Allow-Origin头,但Warden似乎也清除了它。

EN

回答 1

Stack Overflow用户

发布于 2014-01-06 01:47:45

有完全相同的(相当恼人的)想法,最终在我的one上这样做:

before do块上,

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18047665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档