Giving the user a user password - Parse - Swift

I am trying to use the below code so that users can update their password when uibutton is clicked. However, when I enter the current password, I get the message "incorrect current password". I think the system does not compare the entered value with the current password right. Without the first if condition, I can update the password. But first, I want the user to enter the current password for security reasons. Can anyone help?

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


    }

}

      

I updated my code as shown below following @Wains comment and it started working.

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

    }

}

      

+3


source to share


1 answer


The password is not available to you, so PFUser.currentUser()!.password

it will not give you what you can check. To check the password, you need to log in to the user, that is, take the username and password they give you and use PFUser.logInWithUsernameInBackground...

. If you return a valid user, you can install password

and save

.



+4


source







All Articles