Ios 如何在解析中使用重复用户名检查注册

Ios 如何在解析中使用重复用户名检查注册,ios,swift,parse-platform,Ios,Swift,Parse Platform,我正在使用以下代码通过Swift注册解析帐户 var user = PFUser() user.username = self.userNameText.text user.password = self.paswordText.text user["mobileNumber"] = self.mobileNo as! String // user["authCode"] = self.authCode as! String user["deviceId"] = deviceId sel

我正在使用以下代码通过Swift注册解析帐户

var user = PFUser()
user.username = self.userNameText.text
user.password = self.paswordText.text
user["mobileNumber"] = self.mobileNo as! String     //
user["authCode"] = self.authCode as! String
user["deviceId"] = deviceId
self.user.signUpInBackgroundWithBlock({
            (success:Bool, error:NSError?) -> Void in
            if (error == nil) {
                let installation:PFInstallation = PFInstallation.currentInstallation()
                installation["user"] = PFUser.currentUser()
                installation.saveInBackgroundWithBlock({
                    (success:Bool, error:NSError?) -> Void in
                    if (error == nil) {
                        println("Installion Success")
                    } else {
                        println("Installation Error")
                    }
                })
                println("Singup Success")
            } else { 
                println(" error = \(error)")
            }
})
在这个例子中,如果输入的用户名已经保存在Parse中,我想给出一个错误,但是现在它成功地用两个相同的用户名注册了

我怎样才能避免呢

如果要检查用户是否已通过Parse.com注册,则必须在用户表中进行查询。如果用户已存在,则不允许他再次注册

希望这对你有帮助

试试这个

var query = PFQuery(className:"User")
        query.whereKey(key: "username", equalTo:self.userNameText.text)

query.getFirstObjectInBackgroundWithBlock { (object: [AnyObject]?, error: NSError?) -> Void in
    if object != nil
    {
        //User exist
       //give appropriate message
    }
    else
    {
        //User don`t exist"
         //call signup method from here
        self.signUpNewUser()
    }
        }
新用户注册

func signUpNewUser()
{
var user = PFUser()
user.username = self.userNameText.text
user.password = self.paswordText.text
user["mobileNumber"] = self.mobileNo as! String     //
user["authCode"] = self.authCode as! String
user["deviceId"] = deviceId
self.user.signUpInBackgroundWithBlock({
            (success:Bool, error:NSError?) -> Void in
            if (error == nil) {
                let installation:PFInstallation = PFInstallation.currentInstallation()
                installation["user"] = PFUser.currentUser()
                installation.saveInBackgroundWithBlock({
                    (success:Bool, error:NSError?) -> Void in
                    if (error == nil) {
                        println("Installion Success")
                    } else {
                        println("Installation Error")
                    }
                })
                println("Singup Success")
            } else { 
                println(" error = \(error)")
            }
})
}

或者,使用云代码钩子,这样在成功案例中只需发出1个API请求,而不是2个请求。与其在Parse中检查用户表,难道没有一种简单的方法可以让Parse本身在重复名称上返回错误吗?不幸的是,令人惊讶的是,Parse尚未处理重复名称的检查。。。如果您使用默认的解析用户名,那么它不应该允许使用相同的用户名,这必须是“解析没有做的最明显的事情,它们应该做的事情”。这仅适用于您提交具有相同用户名的第二个用户,而另一个用户当前正在后台注册的情况
func signUpNewUser()
{
var user = PFUser()
user.username = self.userNameText.text
user.password = self.paswordText.text
user["mobileNumber"] = self.mobileNo as! String     //
user["authCode"] = self.authCode as! String
user["deviceId"] = deviceId
self.user.signUpInBackgroundWithBlock({
            (success:Bool, error:NSError?) -> Void in
            if (error == nil) {
                let installation:PFInstallation = PFInstallation.currentInstallation()
                installation["user"] = PFUser.currentUser()
                installation.saveInBackgroundWithBlock({
                    (success:Bool, error:NSError?) -> Void in
                    if (error == nil) {
                        println("Installion Success")
                    } else {
                        println("Installation Error")
                    }
                })
                println("Singup Success")
            } else { 
                println(" error = \(error)")
            }
})
}