2015-02-03 8 views
0

Я разрабатываю Rails API и использую Devise для аутентификации.Rails: API: Devise: current_user nil

Когда я использую current_user в контроллерах всегда возвращает nil (как если нет подписанного в пользователь), хотя пользователь уже был подписан в.

Почему он сделал работу при разработке веб-сайта и не работал некоторое время разработка API?

Я использую локон команды для тестирования приложения:

знак в:

curl -v -H 'Content-Type: application/json' -H 'Accept: application/json' -X POST http://localhost:3000/api/v1/sessions -d "{\"user\":{\"email\":\"[email protected]\",\"password\":\"secret123\"}}" 

знак из:

curl -v -H 'Content-Type: application/json' -H 'Accept: application/json' -X DELETE http://localhost:3000/api/v1/sessions/\?auth_token\=JRYodzXgrLsk157ioYHf 
+0

Вы посылаете куки сессии назад с последующими запросами API? – Swards

+0

HTTPie - отличный инструмент для тестирования API https://github.com/jakubroztocil/httpie – Swards

ответ

2

Вы какие-либо из разделяет пространства имен контроллеров?

т.е.

у меня есть:

имен: API, по умолчанию: {формат:: JSON} сделать

devise_for :users, controllers: { 

    registrations: 'api/registrations', 
    sessions:  'api/sessions' 
} 

конец

в моем routes.rb

Я хотел использовать #current_user и #user_signed_in? методы, которые Devise предположительно предоставляет, но все же продолжали получать ошибки «nil» и undefined_method.

Было ли некоторое чтение об именах и реализовано, что у разработчика есть много магических сил. Поскольку мои имена помещали моих пользователей в api, Devise сгенерировал: current_api_user & api_user_signed_in? методы для меня. Они не вернулись ноль

Вы можете прочитать об этом здесь: https://github.com/plataformatec/devise/blob/master/lib/devise/rails/routes.rb#L61

Смежные вопросы