Rails 3+ devise - Как получить devise, чтобы ответить JSON - PullRequest
8 голосов
/ 23 декабря 2010

Моя среда - Rails 3.0.1 с Devise 1.1. Я занимаюсь разработкой мобильного веб-приложения, в основном с использованием javascript, и хотел бы сохранить как можно большую часть коммуникаций на основе JSON.

Есть ли у devise способ ответить сообщением об успехе / неудаче с помощью JSON вместо необходимости перенаправления 302 и анализа HTML?

Посмотрел на использование this .

... но не работает.

1 Ответ

6 голосов
/ 11 января 2011

Вы можете переопределить помощники sign_in_and_redirect и sign_out_and_redirect для создания json вместо перенаправления пользователя.

Я не смог переопределить их в инициализаторе, поэтому самое близкое решение, которое я нашел, - добавить это в application_controller.rb:

private

# Override the default devise signin/signout process
def sign_in_and_redirect(resource_or_scope, resource=nil)
  scope      = Devise::Mapping.find_scope!(resource_or_scope)
  resource ||= resource_or_scope
  sign_in(scope, resource) unless warden.user(scope) == resource
  # redirect_to stored_location_for(scope) || after_sign_in_path_for(resource)
  render :json => {:status => :signed_in}
end


def sign_out_and_redirect(resource_or_scope)
  scope = Devise::Mapping.find_scope!(resource_or_scope)
  if Devise.sign_out_all_scopes
    sign_out_all_scopes
  else
    sign_out(scope)
  end
  #redirect_to after_sign_out_path_for(scope)
  render :json => {:status => :signed_out}
end

Если у кого-нибудь есть более чистое решение, мне тоже интересно

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