Создать пользователя в Devise из JSON - PullRequest
7 голосов
/ 13 января 2012

Я работаю над интеграцией моего приложения на Rails 3.1 с Devise для аутентификации пользователей с моим приложением для iOS.Я бы хотел, чтобы пользователь мог зарегистрироваться из приложения, а затем я могу сохранить эти учетные данные для входа в систему позже.

Используя RestKit, я делаю это:

-(IBAction)registerUser:(id)sender {
    NSDictionary *params = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:
                                                                self.email.text,
                                                                self.password.text,
                                                                self.confirmPassword.text,
                                                                nil]
                                                       forKeys:[NSArray arrayWithObjects:
                                                                @"email",
                                                                @"password",
                                                                @"password_confirmation",
                                                                nil]];

    [[RKClient sharedClient] post:@"/users.json" params:params delegate:self];
}

The /users.json URL-адрес: user_registration POST /users(.:format) {:action=>"create", :controller=>"devise/registrations"} (в соответствии с маршрутами рейка).Похоже, что почтовый вызов принимает разные форматы, поэтому я предполагаю, что он примет JSON.Запрос My Post сериализуется как JSON и отправляется.Сервер получает его, и это журнал:

Started POST "/users.json" for 129.21.84.10 at 2012-01-12 15:33:57 -0500
  Processing by Devise::RegistrationsController#create as JSON
  Parameters: {"password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "email"=>"test1@test.com"}
WARNING: Can't verify CSRF token authenticity
  User Load (0.9ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
   (0.3ms)  BEGIN
   (0.2ms)  COMMIT
   (0.2ms)  BEGIN
   (0.4ms)  ROLLBACK
Completed 422 Unprocessable Entity in 93ms (Views: 3.8ms | ActiveRecord: 10.2ms)

Я получаю 422 ошибку, и мой пользователь не создан.Ответ, который получает мое iOS-приложение: Response: {"email":["can't be blank"],"password":["can't be blank"]}.Но пароль и адрес электронной почты не пустые, сервер получил их успешно.Итак, что-то не работает правильно, и я не уверен, куда идти.Как я могу создать пользователя с помощью JSON?

Спасибо за помощь!

Ответы [ 2 ]

6 голосов
/ 07 февраля 2012

Я просто работаю над тем же, создавая пользователей в Devise из приложения для iPhone.У меня получилось обработать POSTing JSON, который выглядит следующим образом:

{"user":{"email":"test@example.com", "password":"Test123", "password_confirmation":"Test123"}}

и URL:

http://localhost:3000/users.json

и заголовок запроса Content-Тип моего поста: 'application / json'.

Все стандартные конфигурации Devise.

5 голосов
/ 11 сентября 2012

Ваше приложение rails ожидает JSON в этой форме:

{"user":{"email":"test@example.com", "password":"Test123", "password_confirmation":"Test123"}}

Но по умолчанию RestKit отправляет следующее:

{"email":"test@example.com", "password":"Test123", "password_confirmation":"Test123"}

Чтобы добавить «пользователя», вам просто нужно установитьrootKeyPath вот так:

RKObjectMapping *userSerializationMapping = [userMapping inverseMapping];
userSerializationMapping.rootKeyPath = @"user";
[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:userSerializationMapping forClass:[User class]];
...