删除Parse PFUser帐户

时间:2016-01-07 01:59:09

标签: swift parse-platform pfuser

我有一个使用Parse的应用程序(用Swift编写),允许用户创建一个帐户。我希望用户可以选择删除他们的帐户,但似乎无法弄明白并且不确定我做错了什么。我希望用户必须验证他们的电子邮件和密码才能实现此目的。一旦他们删除了他们的帐户,就会弹出一个警告,然后一旦用户解除警报,它就会将他们带回登录屏幕并退出应用程序。

这是我尝试过的:

   @IBAction func deleteAccount(sender: AnyObject) {

 if PFUser.currentUser()?.username == emailAddressTextField.text && PFUser.currentUser()?.password == passwordTextFieldOne.text && PFUser.currentUser()?.password == passwordTextFieldTwo.text {

 PFUser.currentUser()?.deleteInBackgroundWithBlock({ (success: Bool, error: NSError?) -> Void in

            if success {

            let alertController = UIAlertController(title: "Success!", message: "Now Please Login", preferredStyle: .Alert)

            let enterAppAction = UIAlertAction(title: "OK", style: .Default, handler: { (UIAlertAction) -> Void in

                dispatch_async(dispatch_get_main_queue(), { () -> Void in
                    let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("Login")
                    self.presentViewController(viewController, animated: true, completion: nil)
                })
            })

                alertController.addAction(enterAppAction)

                self.presentViewController(alertController, animated: true, completion: nil)

            } else {

            print(error)
            self.displayAlert("Account deletion failed", message: "Please try again", actionTitle: "OK")

            }
        })
    }
}

2 个答案:

答案 0 :(得分:0)

您可以创建云功能,以验证用户是否正确输入了当前密码,并将其返回成功/错误到iOS,此时您可以删除该帐户(如果密码检查成功完成)。这是一个relevant Parse forum post

来自参考文章:

Parse.Cloud.define(FUNCTION_PASSWORD_CHECK, function(request, response) 
{
    var password = request.params.password;

    Parse.User.logIn(request.user.getUsername(), password, {
        success: function(results) 
        {   
            response.success(true);
        },
        error: function() {
            response.success(false);
        }
    });
}); 

注意:您可以在iOS上执行类似的登录功能,但如果用户输入错误密码(我不确定),可能会导致PFUser.currentUser()混乱。此外,引用的函数使用request.user,建议使用(即,不将用户作为参数传递),以便它仅适用于具有会话的用户。

答案 1 :(得分:0)

您最初的if语句:

if PFUser.currentUser()?.username == emailAddressTextField.text && PFUser.currentUser()?.password == passwordTextFieldOne.text && PFUser.currentUser()?.password == passwordTextFieldTwo.text

语句PFUser.currentUser()?.password将返回nil,因为parse不会使您可以访问用户密码。因此,您将无法将用户的密码与输入到文本字段中的文本进行比较。

检查用户是否确实输入了与现有密码匹配的密码:

PFUser.logInWithUsernameInBackground(PFUser.currentUser(), password:passwordTextFieldOne.text!) {
    (user: PFUser?, error: NSError?) -> Void in
    if user != nil {
         //continue with delete function   
    } else {
        //Display error
    }
}