Ответ Rails в зависимости от формата запроса http - PullRequest
1 голос
/ 04 марта 2012

Я хочу создать веб-сайт, который будет отвечать как на обычный запрос браузера, так и на мобильный запрос с использованием JSON из приложения для Android. Я использую устройство для аутентификации. Веб-пользователи будут входить в систему нормально, но для мобильного использования я хочу, чтобы они отправляли логин / пароль только один раз, а затем работали с токеном аутентификации. Для этого я переопределил контроллер сессии devise:

class SessionsController < Devise::SessionsController

skip_before_filter :verify_authenticity_token
respond_to :html, :json

def create
  resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")
  set_flash_message(:notice, :signed_in) if is_navigational_format?
  sign_in(resource_name, resource)

  obj1 = MyModel.find(21)
  obj2 = MyModel.find(22)

  respond_to do |format|
      format.html do
      render :json => obj1
      end
      format.json do
      render :json => obj2
      end
  end
end
def destroy
    super
end 
end

Это фактически фиктивный код, просто чтобы узнать, какой случай выполняется в response_to. Если вы создаете почтовый запрос, передавая данные для входа, как это:

curl -v -X POST -d '{"user" : { "email" : "myemail@gmail.com", "password" : "123456"}}' -H "Content-Type:application/json" http://localhost:3000/users/sign_in

Ответом является JSON-представление obj1. Другими словами, в response_to всегда выполняется запись format.html. Что не так с этим кодом? Почему я получаю этот ответ, если в заголовке указываю, что это запрос в формате JSON?

1 Ответ

0 голосов
/ 26 марта 2012

Я заставил это работать, добавив: -H "Принять: application / json"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...