如何在 CloudKit 中创建用户? [关闭]

Posted

技术标签:

【中文标题】如何在 CloudKit 中创建用户? [关闭]【英文标题】:How to create user in CloudKit? [closed] 【发布时间】:2016-03-26 05:54:39 【问题描述】:

在 Parse 中,为了创建一个新用户,我使用了:

var user = PFUser()
user.username = "myUsername"
user.password = "myPassword"
user.email = "email@example.com"

CloudKit 中用于创建新用户并用于登录的代码是什么?

【问题讨论】:

您可以使用CKContainer fetchUserRecordIDWithCompletionHandler获取当前用户的记录 如何使用它来制作注册应用程序?哪个会添加一个新用户,包括用户名、电子邮件 ID 和密码? 我认为您无法生成自己的注册序列。用户应该注册到 Apple Cloud,以便您使用 Cloudkit 用户功能。 好的。你觉得 Parse 好还是 CloudKit 好? 没什么好想的。 Parse 已关闭其服务。 【参考方案1】:

我最近不得不做类似的事情。我必须为每个包含用户名和密码的用户创建一个CKRecord。我将他们的用户名添加到NSUserDefaults 以便于检索。

这是注册代码:

//Check if users exist
let query = CKQuery(recordType: "MyUsers", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
            pubDB.performQuery(query, inZoneWithID: nil, completionHandler:  (records, error) in

                //error code 11 is no objects found
                if error == nil || error?.code == 11 

                    var usernameExists = false

                    for record in records! 

                        if record.objectForKey("username") as? String == self.usernameField.text 
                            //other user with the same username exists - don't allow user to create account
                            usernameExists = true

                        

                    

                    if usernameExists == true 

                        //displayErrorAlert is a function in which I display an error alert to the user
                        displayErrorAlert("Username \(self.usernameField.text!) is taken. Please choose another one.", vc: self)

                     else 
                        //user can sign up
                        let record = CKRecord(recordType: "MyUsers")
                        record.setObject(self.usernameField.text!, forKey: "username")
                        record.setObject(self.passwordField.text!, forKey: "password")

                        pubDB.saveRecord(record, completionHandler:  (record, error) in

                            if error == nil 

                                NSOperationQueue.mainQueue().addOperationWithBlock 

                                    NSUserDefaults.standardUserDefaults().setObject(self.usernameField.text!, forKey: "username")
                                    username = self.usernameField.text!
                                    self.performSegueWithIdentifier("account", sender: self)

                                

                             else 

                                print(error)

                            

                        )

                    

                 else 

                    print(error)

                

            )

这里是登录代码:

//query users to find current user
let query = CKQuery(recordType: "MyUsers", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
            pubDB.performQuery(query, inZoneWithID: nil, completionHandler:  (records, error) in

                //we do not need to check for error code 11 because a user should exist
                if error == nil 

                    var userExists = false

                    for record in records! 

                        if record.objectForKey("username") as? String == self.usernameField.text 

                            if record.objectForKey("password") as? String == self.passwordField.text 

                                NSOperationQueue.mainQueue().addOperationWithBlock 

                                    userExists = true
                                    NSUserDefaults.standardUserDefaults().setObject(self.usernameField.text!, forKey: "username")
                                    username = self.usernameField.text!
                                    self.performSegueWithIdentifier("account", sender: self)

                                

                             else 

                                //user with the username exists, but the password does not match
                                displayErrorAlert("Your password is incorrect", vc: self)

                            

                        

                    

                    if userExists == false 

                        //user with that username does not exist
                        displayErrorAlert("Your username is incorrect", vc: self)

                    


                 else 

                    print(error)

                

            )

        

当视图出现时,我调用此代码来检查当前用户:

if NSUserDefaults.standardUserDefaults().objectForKey("username") != nil 
    username = NSUserDefaults.standardUserDefaults().objectForKey("username") as! String
    self.performSegueWithIdentifier("account", sender: self)

variable username 是所有类的全局变量。如果你不喜欢使用全局变量,你应该改变它。

希望这会有所帮助。

【讨论】:

好的,谢谢,你能提供完整的代码吗? 好的。完毕。如果我遗漏了什么,请告诉我。 谢谢。这就是我想要的。 :) DOWNVOTED - 这是一个安全风险。密码是世界可读的,这是一种糟糕的方法。如果您有能力写入 CloudKit,那么您已经有一个用户 ID 和通过 FetchUserRecordID 进行的身份验证 是的,但那是用户的 iCloud 帐户密码。这是一个临时解决方案;如果你愿意,你可以加密密码。

以上是关于如何在 CloudKit 中创建用户? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 CloudKit Dashboard 中创建自定义记录区

如何在 CloudKit 中创建记录作为孩子的记录列表?

在 CloudKit 仪表板中创建布尔字段

CloudKit 订阅不能在代码中创建吗?

PDF多页不在android中创建[关闭]

在 CloudKit 中创建指向多个 CKRecord 的引用列表