如何使用PFQuery检查用户信息

时间:2016-10-14 03:53:05

标签: swift parse-platform

当用户注册时,他/她被重定向到另一个视图控制器,他们需要验证他们的电话号码。我尝试设置PFQuery从Parse中检索用户的代码,看看它是否与验证文本字段中的内容匹配,但是,它总是导致用户被重定向到主视图控制器,无论输入的代码是否正确或者错了。我也尝试过使用objectForKey(currentUser)和查询if phoneCode != currentUser,但结果是一样的。我要做的是检查输入的代码是否正确,并根据响应将用户重定向到另一个视图控制器。

@IBAction func submitCodeTapped(sender: AnyObject) {
    let currentUser = PFUser.currentUser()?.objectForKey("phoneVerification") as? NSValue
    let code = codeTextField.text
    let query = PFQuery(className: "User")
    let phoneCode = query.whereKey("phoneVerification", equalTo: code!)
    query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
        if error != nil || objects != nil {
        //if phoneCode != currentUser{
            self.displayAlert2("Wrong Code", message: "This is not the code you were sent.")
        }else{
            let myUser:PFUser = PFUser.currentUser()!
            myUser.setObject(true, forKey: "phoneVerified")
            myUser.saveInBackgroundWithBlock { (success, error) -> Void in
                if error == nil{
                    print("Successfully set the object.")
                    self.displayAlert("Great!", message: "Your phone number has been verified!", error: nil)
                    let appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
                    appDelegate.buildUserInterface()
                }else{
                    //let loginVC = self.storyboard?.instantiateViewControllerWithIdentifier("signInPage")
                    //self.navigationController?.pushViewController(loginVC!, animated: true)
                    print("Erreur")

                }
            }
        }
    })
}

2 个答案:

答案 0 :(得分:0)

变化

let query = PFQuery(className: "User")
let phoneCode = query.whereKey("phoneVerification", equalTo: code!)

let query = PFQuery(className: "_User")
query.whereKey("phoneVerification", equalTo: code!)

如果要使用查询获取用户,则用户类的名称为_User。这就是为什么在你的代码中,你总是得到对象是nil,所以转向else语句。

另外,我建议你打印物品,看看你得到了什么。

答案 1 :(得分:0)

在您的第一个if语句中,您告诉服务器如果查找对象时出错,或者查询找到了某些对象,则显示警报。但是假设用户输入了错误的代码,查询将返回一个空数组(请注意,它不会返回nil,它是一个空数组),但是赢了&# 39; t为任何错误,因此执行else块。

并且因为您的" phoneVerification"是一个数字,我们需要将codeTextField.text转换为NSNumber:

let code = NSNumber(value:Int(codeTextField.text)!)
let query = PFQuery(className: "_User")
query.whereKey("phoneVerification", equalTo: code!)

您可以将第一个if语句更改为:

if ((error != nil && error! as! Bool) || objects?.count == 0) {
    //handle the error here.
}