Добавьте настраиваемый заголовок ответа с помощью Rack-cors и Grape

Я разрабатываю приложение Ionic (Cordova) с Ruby on Rails API. Я хочу использовать заголовки ответов для возврата токена после входа в систему. Я использую rack-cors gem, чтобы запрос Cross Origin работал:

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

и grape gem для управления моими маршрутами API. Но я не могу найти способ добавить заголовок к моему ответу, так как добавил rack-cors.

Я пробовал это:

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

Но это не работает. Что бы я ни делал, я получаю эти заголовки:

{cache-control: max-age = 0, private, must-revalidate, content-type: application / json}

Может ли кто-нибудь помочь мне с этим вопросом?


person Shrolox    schedule 04.04.2016    source источник
comment
можете ли вы добавить их в application_controller.rb и удалить текущий файл protect_from_forgery. добавить protect_from_forgery with: :exception, if: Proc.new { |c| c.request.format != 'application/json' } protect_from_forgery with: :null_session, if: Proc.new { |c| c.request.format == 'application/json' }   -  person 7urkm3n    schedule 04.04.2016
comment
Если вы работаете локально и вызываете rails api, он не должен давать вам стоечный шнур, как я знаю. У меня просто нет опыта работы с кордовой.   -  person 7urkm3n    schedule 04.04.2016
comment
Действительно, я работаю локально. Я попытался изменить свой protect_from_forgery, как вы предложили, но это дает мне хорошо известную ошибку Access-Control-Allow-Origin   -  person Shrolox    schedule 04.04.2016
comment
И ionic можно эмулировать в моем браузере, просто чтобы вы знали, так что это в значительной степени запрос Ajax, который я делаю.   -  person Shrolox    schedule 04.04.2016
comment
localhost: 3007 / api / login   -  person Shrolox    schedule 04.04.2016
comment
что вы используете для входа в систему?   -  person 7urkm3n    schedule 04.04.2016
comment
да, я использую devise   -  person Shrolox    schedule 04.04.2016
comment
если придумаете, воспользуйтесь этим https://github.com/lynndylanhurley/devise_token_auth, насколько я знаю, все будет в порядке.   -  person 7urkm3n    schedule 04.04.2016
comment
Спасибо я попробую это   -  person Shrolox    schedule 04.04.2016


Ответы (1)


Я использовал 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
person 7urkm3n    schedule 04.04.2016
comment
Просто указываю, что настраиваемый заголовок должен быть в нижнем регистре, если он объявлен в ключе expose. - person lgx; 15.11.2018