【问题标题】:Letting User Update Password - Parse - Swift让用户更新密码 - 解析 - Swift
【发布时间】:2015-06-21 08:34:11
【问题描述】:

我正在尝试下面的代码,让用户在单击 uibutton 时更新他们的密码。但是,当我正确输入当前密码时,我会收到“当前密码错误”的消息。我猜系统不会将输入的值与当前密码进行比较。如果没有第一个 if 条件,我可以更新密码。但出于安全原因,我希望用户首先输入当前密码。有人可以帮忙吗?

@IBAction func updatePasswordBtn(sender: AnyObject) {


    var passwordCheckQuery = PFQuery(className: "_User")
    passwordCheckQuery.whereKey("username", equalTo: PFUser.currentUser()!.username!)
    var objects = passwordCheckQuery.findObjects()


    for object in objects! {


        if currentPassword.text == PFUser.currentUser()!.password {

            if newPassword.text == retypeNewPassword.text {

                var query6 = PFUser.query()

                query6!.whereKey("username", equalTo: PFUser.currentUser()!.username!)


                query6!.findObjectsInBackgroundWithBlock {

                    (objects: [AnyObject]?, error: NSError?) -> Void in

                    for object6 in objects! {

                        var ob6:PFObject = object6 as! PFObject

                        ob6["password"] = self.newPassword.text

                        ob6.save()

                    }

                }

            }

              else {  println("passwords dont match")
            }

    }

        else {  println("wrong current password")
        }


    }

}

@Wains 发表评论后,我将代码更新如下,它开始工作了。

@IBAction func updatePasswordBtn(sender: AnyObject) {


    PFUser.logInWithUsernameInBackground(PFUser.currentUser()!.username!, password: currentPassword.text) {
        (user:PFUser?, error:NSError?) -> Void in

        if error == nil {


            var passwordCheckQuery = PFQuery(className: "_User")
            passwordCheckQuery.whereKey("username", equalTo: PFUser.currentUser()!.username!)
            var objects = passwordCheckQuery.findObjects()


            for object in objects! {

                if self.newPassword.text == self.retypeNewPassword.text {

                    var query6 = PFUser.query()

                    query6!.whereKey("username", equalTo: PFUser.currentUser()!.username!)


                    query6!.findObjectsInBackgroundWithBlock {

                        (objects: [AnyObject]?, error: NSError?) -> Void in

                        for object6 in objects! {

                            var ob6:PFObject = object6 as! PFObject

                            ob6["password"] = self.newPassword.text

                            ob6.save()

                            println("successfully updated password")

                        }

                    }

                }

                else {  println("passwords dont match")
                }
            }

        } else {

            println("wrong current password")
        }

    }

}

【问题讨论】:

  • 只是关于密码的注意事项:不要以纯文本形式保存它们,对它们进行哈希和加盐!总是!每个使用您的应用并设置密码的人都过着危险的生活。
  • 我完全支持@luk2302:不要将密码保存为纯文本!这是某人可能犯的最严重的错误之一,如果我是您的应用程序的用户,我不会因此而使用它..
  • 你好,实际上当我使用解析用户表来存储密码时,它们不是自动散列的吗?据说它们不像链接parse.com/questions/are-user-passwords-encrypted-or-hashed那样以纯文本形式存储

标签: ios swift parse-platform passwords


【解决方案1】:

密码对您不可用,因此PFUser.currentUser()!.password 不会为您提供可以检查的东西。要验证密码,您需要登录用户 - 即获取他们给您的用户名和密码并使用PFUser.logInWithUsernameInBackground...。如果你得到一个有效的用户,那么你可以设置passwordsave

【讨论】:

  • 那么如果我再次登录一个已经登录的用户会不会有问题?
  • 理论上不会。如果是已经登录的同一用户,那应该没问题。如果是其他用户,那么他们将成为当前用户...
猜你喜欢
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
  • 2015-02-23
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
相关资源
最近更新 更多