2016-01-07 92 views
0

我有一个应用程序(用Swift编写)使用Parse并允许用户创建一个帐户。我希望用户可以选择删除他们的帐户,但似乎无法弄清楚,不知道我在做什么错误。我希望用户必须验证他们的电子邮件和密码才会发生。一旦他们删除了他们的账户,就会弹出一个警告,然后一旦用户解除了警报,就会将他们带回登录屏幕并退出应用程序。删除解析PFUser帐户

这是我已经试过:

@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") 

      } 
     }) 
    } 
} 
+1

你得到一个错误? –

+0

不,我认为这不是读取PFUser.currentUser密码,因为当我打印出来它打印零。这是有道理的,因为Parse保护他们的密码。我只是让它工作,以便用户可以删除他们的计数,但它不需要任何电子邮件或密码验证。他们只是点击一个按钮,它删除了帐户。我宁愿有验证。 – dcotter

+0

你可以尝试做一些像query.wherekey(电子邮件= PFUser.currentUser()。电子邮件)和之后做一个删除?我不记得query.wherekey的correcxt语法.. –

回答

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,这是建议的(即,不会将用户作为参数传递),以便它只对具有会话的用户有效。

+0

感谢这似乎是正确的道路。我以前没有使用Parse云功能,但是我将要学习它。这似乎导致我走上了正确的道路。 – dcotter

0

您最初的if语句:

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

声明PFUser.currentUser()?.password将返回nil作为解析不会使用户密码访问你。因此,您将无法将用户的密码与输入到文本字段中的文本进行比较。

要检查用户是否在事实上输入了相匹配的现有密码的密码:

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