从 JSON 在 Devise 中创建用户

Posted

技术标签:

【中文标题】从 JSON 在 Devise 中创建用户【英文标题】:Create User in Devise from JSON 【发布时间】:2012-01-12 20:38:06 【问题描述】:

我正在将运行 Devise 的 Rails 3.1 应用程序与我的 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];

/users.json 网址转到: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"]。但是密码和邮箱不为空,服务器成功获取。所以,有些事情不正常,我不知道该去哪里。如何使用 JSON 创建用户?

感谢您的帮助!

【问题讨论】:

你有没有得到这个工作? 不,但我不需要它就可以继续工作。不过我以后可能会需要它…… 【参考方案1】:

我自己也在做同样的事情——在 Devise 中通过 iPhone 应用创建用户。我已经通过 POST 看起来像这样的 json 让它工作了:

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

和网址:

http://localhost:3000/users.json

我的帖子的请求标头 Content-Type 是 'application/json'。

所有标准设计配置。

【讨论】:

@quantumpotato 奇怪!你试过this @quantumpotato Devise 抛出 406,因为它只接受从 v 2.2 开始的 html。您必须明确地将其设置为接受 JSON,如下所示:github.com/plataformatec/devise/wiki/…【参考方案2】:

您的 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]];

【讨论】:

以上是关于从 JSON 在 Devise 中创建用户的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Devise 中手动创建新用户和用户会话?

使用 Devise 从 Rails 上的 json api 进行身份验证

Ruby Rails 在控制器中模拟 Devise authed 用户

Flutter:使用从 Firebase 身份验证创建的帐户在 Firestore 中创建用户

使用设计注册

从用户会话进程打开在服务中创建的 JobObject