从JSON创建Devise中的用户

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

使用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]; } 

/users.json url转到: user_registration POST /users(.:format) {:action=>"create", :controller=>"devise/registrations"} (根据rake路由)。 看来post调用接受不同的格式,所以我认为它会接受JSON。 我的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"]}是: Response: {"email":["can't be blank"],"password":["can't be blank"]} 。 但密码和电子邮件不是空白,服务器成功完成了它们。 所以,有些东西不能正常工作,我不知道该去哪里。 如何使用JSON创建用户?

谢谢你的帮助!

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

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

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

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

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

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

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

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

和URL:

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

和我的post的请求标题Content-Type是’application / json’。

所有标准的Devise配置。