Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 添加带有Rack cors和Grape的自定义响应标头_Ruby On Rails_Ruby_Grape_Rack Cors - Fatal编程技术网

Ruby on rails 添加带有Rack cors和Grape的自定义响应标头

Ruby on rails 添加带有Rack cors和Grape的自定义响应标头,ruby-on-rails,ruby,grape,rack-cors,Ruby On Rails,Ruby,Grape,Rack Cors,我正在开发一个带有RubyonRails API的Ionic(Cordova)应用程序。 我想在登录后使用响应头返回令牌。 我正在使用rack corsgem来实现跨原产地请求: application.rb 和grape gem来管理我的API路由。 但是,由于我添加了rackcors,因此我找不到向响应添加标题的方法 我试过这个: header('Access-Token', user.token.key) 但它不起作用。无论我做什么,我最终都会得到这些标题: {缓存控制:“最大年龄=0,

我正在开发一个带有RubyonRails API的Ionic(Cordova)应用程序。 我想在登录后使用响应头返回令牌。 我正在使用
rack cors
gem来实现跨原产地请求:

application.rb 和grape gem来管理我的API路由。 但是,由于我添加了
rackcors
,因此我找不到向响应添加标题的方法

我试过这个:

header('Access-Token', user.token.key)
但它不起作用。无论我做什么,我最终都会得到这些标题:

{缓存控制:“最大年龄=0,私有,必须重新验证”,内容类型: “应用程序/json”}


有人能帮我解决这个问题吗?

我使用了
gem'design\u token\u 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
类应用程序:any,
:expose=>['access-token','expiration','token type','uid','client'],
:methods=>[:get,:post,:options,:delete,:put]
结束
结束
结束

我使用了
gem'designe\u token\u 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
类应用程序:any,
:expose=>['access-token','expiration','token type','uid','client'],
:methods=>[:get,:post,:options,:delete,:put]
结束
结束
结束

是否可以将这些添加到应用程序\u controller.rb中,并删除当前的“防止伪造”功能。添加
Proc.new{c}c.request.format!='application/json'}Proc.new{c}c.request.format='application/json}使用::null_会话防止伪造,if:Proc.new{c}c.request.format='application/json}
如果您在本地工作并调用rails api,我知道它不应该给您机架线。我只是对科尔多瓦没有经验。事实上,我在当地工作。我试着按照你的建议更改我的protect_from_forgery,但它给了我一个众所周知的“Access Control Allow Origin”错误,并且ionic可以在我的浏览器中模拟,正如你所知,所以我正在做的几乎是一个Ajax请求。你可以将这些添加到application_controller.rb并删除当前的protect_from_forgery吗。添加
Proc.new{c}c.request.format!='application/json'}Proc.new{c}c.request.format='application/json}使用::null_会话防止伪造,if:Proc.new{c}c.request.format='application/json}
如果您在本地工作并调用rails api,我知道它不应该给您机架线。我只是对科尔多瓦没有经验。事实上,我在当地工作。我试图按照你的建议更改我的protect_from_force_force force,但它给了我一个众所周知的“Access Control Allow Origin”错误,并且可以在我的浏览器中模拟ionic,正如你所知,因此,这几乎是一个Ajax请求,我只是指出,在
expose
键中声明时,自定义头需要小写。只是指出,在
expose
键中声明时,自定义头需要小写。