Я следую этой замечательной статье, чтобы настроить часть аутентификации моего rails (3.2) API:
http://blog.joshsoftware.com/2011/12/23/designing-rails-api-using-rabl-and-devise/
Я сделал следующий шаг:
-Добавлено устройство в Gemfile
-Включил разработку для пользовательской модели и запустил необходимые миграции
- Моя модель пользователя
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
devise :token_authenticatable
attr_accessible :email, :authentication_token, :password, :password_confirmation, :remember_me
end
, а также token_authenticable в базе данных (посредством миграции).
-Поддерживает регистрационный контроллер с:
class RegistrationsController < Devise::RegistrationsController
def new
super
end
def create
resource = warden.authenticate!(:scope => resource_name, :recall => " {controller_path}#new")
sign_in(resource_name, resource)
current_user.reset_authentication_token!
respond_with resource, :location => after_sign_in_path_for(resource)
end
def update
super
end
end
-В маршрутах.rb у меня есть:
devise_for :users, :controllers => {:registrations => "registrations"}
СОЗДАНИЕ ПОЛЬЗОВАТЕЛЯ
Мне бы хотелось, чтобы следующий запрос создал пользователя и отправил обратно authentification_token:
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"user":{"email":"email@gmail.com", "password":"pass"}}' 'http://localhost:3000/users.json
Насколько я понимаю, логика должна идти в методе "создания" контроллера регистрации (который должен создать пользователя и одновременно войти в него). Я думаю, что я должен быть неправ, так как сообщение, которое я получил в ответ:
{"error":"You need to sign in or sign up before continuing."}
Какая недостающая часть для создания и регистрации нового пользователя? Разве POST для users.json не сопоставлен с RegistrationController # create?
ВХОД ПОЛЬЗОВАТЕЛЯ
Кроме того, я хотел бы, чтобы следующий запрос для входа в систему пользователя (отправка ему обратно его authentification_token после проверки логина / пароля)
curl -H "Accept: application/json" -H "Content-type: application/json" -X GET -d '{"user":{"email":"email@gmail.com","password":"pass"}}' 'http://localhost:3000/users.json
Я думаю, логика должна идти в методе "update" RegistrationController, но не уверен на 100% в этом. После входа в систему я добавлю аутентификацию токена, чтобы защитить создание / просмотр некоторых других моделей.
UPDATE
Когда я выпускаю:
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"user":{"email":"email@gmail.com", "password": "mypass", "phone":"1234567890"}}' 'http://localhost:3000/users.json'
Я получил следующее сообщение:
Started POST "/users.json" for 127.0.0.1 at 2012-03-11 20:50:05 +0100
Processing by RegistrationsController#create as JSON
Parameters: {"user"=>{"email"=>"email@gmail.com", , "password"=>"[FILTERED]", "phone"=>"1234567890"}, "registration"=>{"user"=>{"email"=>"email@gmail.com", "password"=>"[FILTERED]", "phone"=>"1234567890"}, "action"=>"create", "controller"=>"registrations", "format"=>"json"}}
WARNING: Can't verify CSRF token authenticity
Completed 401 Unauthorized in 1ms
Есть какие-нибудь идеи, почему пользователь не создан и не вошел в систему и почему не возвращен аутентификационный_токен?