2015-06-21 62 views
3

我想下面的代碼,讓用戶更新他們的密碼,當一個uibutton被點擊。但是,當我輸入當前密碼時,我收到「錯誤的當前密碼」消息。我想系統不會將輸入的值與當前密碼權限進行比較。如果沒有第一個條件,我可以更新密碼。但是我首先要求用戶輸入當前的密碼,以確保安全。有人可以幫忙嗎?讓用戶更新密碼 - 解析 - 斯威夫特

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

    } 

} 
+0

只是一個關於密碼的說明:不要將它們保存爲純文本,哈希和鹽!總是!每個使用你的應用並設置密碼的人都過着危險的生活。 – luk2302

+0

我完全與@ luk2302:不要將密碼保存爲普通文本!這是有人可以犯的最糟糕的錯誤之一,如果我是你的應用程序的用戶,我不會使用它,因爲這.. – Kametrixom

+1

再次您好,實際上,因爲我使用解析用戶表進行密碼存儲,arent他們自動散列?有人說,他們不是以純文本形式存儲在鏈接https://parse.com/questions/are-user-passwords-encrypted-or-has-has-has-hash – saner

回答

4

密碼是不提供給你,這樣做PFUser.currentUser()!.password是不會給你的東西,你可以覈對。要驗證密碼,您需要登錄該用戶 - 即使用他們提供的用戶名和密碼並使用PFUser.logInWithUsernameInBackground...。如果您獲得有效的用戶,則可以設置passwordsave

+0

因此,如果我再次登錄一個用戶,這將是一個問題已經登錄? – saner

+0

理論上,沒有。如果是已經登錄的用戶,則應該沒問題。如果它是一個不同的用戶,那麼他們將成爲當前的用戶... – Wain

+0

謝謝你Wain它的工作 – saner