2016-04-04 61 views
0

我正在开发带有Ruby on Rails API的Ionic(Cordova)应用程序。 我想在登录后使用响应头来返回令牌。 我使用rack-cors宝石,使跨源请求工作:使用Rack-cors和Grape添加自定义响应标头

application.rb中

config.middleware.insert_after Rails::Rack::Logger, Rack::Cors, :logger => Rails.logger do 
     allow do 
     origins '*' 
     resource '/api/*', :headers => :any, :methods => [:get, :post, :options, :put] 
     end 
    end 

和葡萄宝石来管理我的API路线。 但我找不到添加标题的方法,因为我添加了rack-cors

我尝试这样做:

header('Access-Token', user.token.key) 

但它不工作。无论我做什么我结束了这些头:

{缓存控制:“最大年龄= 0,民营,必重新验证”,内容类型: “应用/ JSON”}

任何人都可以帮助我解决这个问题吗?

+0

您可以将这些添加到application_controller.rb并删除您当前的protect_from_forgery。添加'protect_from_forgery::exception,如果:Proc.new {| c | c.request.format!='application/json'} protect_from_forgery with::null_session,if:Proc.new {| c | c.request.format =='application/json'}' – 7urkm3n

+0

如果你在本地工作并且调用rails api,它不应该给你机架线,因为我知道。我只是没有与科尔多瓦的经验。 – 7urkm3n

+0

事实上,我在当地工作。我试图改变我的protect_from_forgery,正如你所建议的,但它给了我众所周知的“Access-Control-Allow-Origin”错误 – Shrolox

回答

3

我用gem 'devise_token_auth'

另外,我曾在application.rb中这种配置中。

class Application < Rails::Application 
    # Do not swallow errors in after_commit/after_rollback callbacks. 
    config.active_record.raise_in_transactional_callbacks = true 

    config.middleware.use Rack::Cors do 
     allow do 
     origins '*' 
     resource '*', 
      :headers => :any, 
      :expose => ['access-token', 'expiry', 'token-type', 'uid', 'client'], 
      :methods => [:get, :post, :options, :delete, :put] 
     end 
    end 

    end 
+0

使用:在配置中暴露密钥诀窍!谢谢 – Shrolox

+0

哈哈,很高兴帮助) – 7urkm3n

相关问题