用户在先前注销后,错误地使用无效数据登录



我有一个登录屏幕,确保在尝试登录之前输入字段中有有效的数据。至少我是这么想的。

问题是,当我们从另一个屏幕,"注销"的用户,如果我提交一个无效的用户名密码组合返回到这个页面后,我看到的错误对话框如预期的,但在解雇它,然后我被带到下一个视图控制器,如果我登录。

请帮忙好吗?

@IBAction func btnSubmit(sender: UIButton) {
        if txtUsername.text == "" || txtPassword.text == "" {
            //they're missing a username or password
            displayAlert("Missing Field(s)", message: "Please enter both a username and password")
        }else {
            //we check if they're in signup/login mode
            if Switch.on {
                //user is in signup mode
                if txtPassword.text != txtConfirmPassword.text {
                    //the password fields do not match
                    displayAlert("Mismatched Passwords", message: "Please enter matching passwords")
                }else {
                    //the password fields do match, and the user can register with this username/email and password
                    var user = PFUser()
                    user.username = txtUsername.text
                    user.password = txtPassword.text
                    // other fields can be set just like with PFObject
                    user.signUpInBackgroundWithBlock {
                        (succeeded: Bool, error: NSError?) -> Void in
                        if let error = error {
                            let errorString = error.userInfo?["error"] as! String
                            // Show the errorString somewhere and let the user try again.
                            self.displayAlert("Signup Error", message: errorString)
                        } else {
                            // Hooray! Let them use the app now.
                            self.performSegueWithIdentifier("register", sender: self)
                        }
                    }                }
            }else {
                //user is in login mode and we can submit credentials

                PFUser.logInWithUsernameInBackground(txtUsername.text, password:txtPassword.text) {
                    (user: PFUser?, error: NSError?) -> Void in
                    if let error = error {
                        let errorString = error.userInfo?["error"] as! String
                        // Show the errorString somewhere and let the user try again.
                        self.displayAlert("Login Error", message: errorString)
                    } else {
                        if PFUser.currentUser()!.username != nil {
                            // Do stuff after successful login.
                            self.performSegueWithIdentifier("login", sender: self)
                        }
                    }
                }
            }
        }
    }

这是我从另一个页面的注销调用

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "logout" {
            PFUser.logOut()
        }
    }

我认为问题是您没有使用在完成处理程序中返回的成功Bool值。当我用Parse登录用户时,我主要用它来查看登录是否成功,如果不成功,我会检查错误消息是什么。这应该阻止你允许用户在没有正确登录的情况下继续进入应用程序。

user.signUpInBackgroundWithBlock {
    (succeeded: Bool, error: NSError?) -> Void in
    if error != nil {
        let errorString = error!.userInfo?["error"] as! String
        // Show the errorString somewhere and let the user try again.
        self.displayAlert("Signup Error", message: errorString)
    } else {
        if succeeded {
            // Hooray! Let them use the app now.
            self.performSegueWithIdentifier("register", sender: self)
        } else {
            //Something went wrong
        }
    }
}

最新更新