2016-01-07 130 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 
    } 
}