【问题标题】:Delete Parse PFUser Account删除 Parse PFUser 帐户
【发布时间】:2016-01-07 01:59:09
【问题描述】:

我有一个使用 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")

            }
        })
    }
}

【问题讨论】:

  • 你收到错误了吗?
  • 不,我认为这不是读取 PFUser.currentUser 密码,因为当我打印出来时它打印为零。这是有道理的,因为 Parse 保护他们的密码。我刚刚让它工作,所以用户可以删除他们的计数,但它不需要任何电子邮件或密码验证。他们只需点击一个按钮,它就会删除该帐户。我希望有验证。
  • 您可以尝试执行类似 query.wherekey(email = PFUser.currentUser().email) 的操作,然后执行删除操作吗?我不记得 query.wherekey.. 的正确语法。

标签: swift parse-platform pfuser


【解决方案1】:

您可以创建一个云功能来验证用户是否正确输入了当前密码,并让它返回成功/错误给 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,这是建议的(即,也不要将用户作为参数传递),因此它仅适用于具有会话的用户。

【讨论】:

  • 谢谢,这似乎是正确的道路。我以前没有使用过 Parse 云功能,但我要学习它。这似乎引导我走上正确的道路。
【解决方案2】:

你的初始 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
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2021-06-23
    • 2014-09-12
    • 1970-01-01
    相关资源
    最近更新 更多