从JSON创建Devise中的用户

Eth*_*ick 7 iphone json ruby-on-rails devise restkit

我正在使用我的iOS应用程序集成运行Devise的Rails 3.1应用程序进行用户身份验证.我希望用户能够从应用程序注册,然后我可以存储这些凭据以便稍后登录.

使用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];
}
Run Code Online (Sandbox Code Playgroud)

/users.json网址进入:user_registration POST /users(.:format) {:action=>"create", :controller=>"devise/registrations"}(根据耙路线).看来post调用接受不同的格式,所以我认为它会接受JSON.我的帖子请求被序列化为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)
Run Code Online (Sandbox Code Playgroud)

我收到422错误,我的用户没有创建.我的iOS应用程序获得的响应是​​:Response: {"email":["can't be blank"],"password":["can't be blank"]}.但密码和电子邮件不是空白,服务器成功获得了它们.所以,有些东西不能正常工作,我不知道该去哪里.如何使用JSON创建用户?

谢谢你的帮助!

ED-*_*209 6

我自己也在做同样的事情 - 从iPhone应用程序在Devise中创建用户.我通过POST json看起来像这样:

{"user":{"email":"test@example.com", "password":"Test123", "password_confirmation":"Test123"}}
Run Code Online (Sandbox Code Playgroud)

和URL:

HTTP://本地主机:3000/users.json

我的帖子的请求标题Content-Type是'application/json'.

所有标准的Devise配置.

  • @quantumpotato Devise正在抛出406,因为它只接受2.2版本的HTML.您必须明确将其设置为接受JSON,如下所示:https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.2 (3认同)

mra*_*bin 5

您的rails应用程序期望以这种形式使用JSON:

{"user":{"email":"test@example.com", "password":"Test123", "password_confirmation":"Test123"}}
Run Code Online (Sandbox Code Playgroud)

但默认情况下,RestKit发送此信息:

{"email":"test@example.com", "password":"Test123", "password_confirmation":"Test123"}
Run Code Online (Sandbox Code Playgroud)

要添加"user",您只需要像这样设置rootKeyPath:

RKObjectMapping *userSerializationMapping = [userMapping inverseMapping];
userSerializationMapping.rootKeyPath = @"user";
[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:userSerializationMapping forClass:[User class]];
Run Code Online (Sandbox Code Playgroud)