Использование Devise 1.3 для аутентификации запросов входа в систему JSON - PullRequest
6 голосов
/ 12 мая 2011

Я новичок в рельсах. Я пытаюсь написать API для мобильного приложения, которое аутентифицируется с помощью JSON. Я хочу использовать Devise для аутентификации. Я считаю, что в Devise> 1.3 также добавлена ​​поддержка JSON, но я не могу найти какие-либо примеры или литературу по нему.

Может кто-нибудь указать мне какой-либо ресурс для этого или предоставить пример кода?

Спасибо! Satyam

Ответы [ 3 ]

7 голосов
/ 23 марта 2014

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

В вашем application.rb добавьте следующее в ваш класс приложений

config.to_prepare do
  DeviseController.respond_to :html, :json
end

В config / initializer / devise.rb добавьте :json к форматам. Эта строка закомментирована по умолчанию, поэтому вам нужно раскомментировать строку.

config.navigational_formats = ['*/*', :html, :json]

После этого вы можете отправить объект json в sign_in.json или что-либо еще, что вы настроили в своих маршрутах для входа.

{
  "user": {
    "email": "blah@blah.com",
    "password": "blah"
  }
}

И в случае успеха он вернет 201 созданный и вошедшего в систему пользователя как объект JSON. При ошибке он вернет 401 с сообщением JSON с указанием причины сбоя.

Пример:

{"error":"Invalid email or password."}

Вот хороший пример, если вы используете Backbone / Marionntte на переднем конце.

http://joshhuckabee.com/integrating-devise-backbonejs

6 голосов
/ 12 мая 2011

Возможно, это>> 1001 *http://jessehowarth.com/devise?

Я планирую сделать то же самое через неделю или две.

4 голосов
/ 06 декабря 2011

Решение Джесси Ховарта прервет ведение журнала в браузере при использовании ответов в формате html. Если вы хотите, чтобы JSON и HTML работали, попробуйте что-то вроде этого:

class SessionsController < Devise::SessionsController
  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)
    respond_to do |format|  
      format.html { respond_with resource, :location => after_sign_in_path_for(resource) }  
      format.json {  
         return render :json => {  :success => true, 
           :user => resource
         } 
      }  
    end
  end
end

И не забудьте изменить маршруты для использования этого контроллера

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