5

我想從Firebase中刪除當前用戶。然而,經過身份驗證的用戶被刪除,我無法刪除數據庫中該用戶的數據。我究竟做錯了什麼?iOS SWIFT:無法從Firebase數據庫中刪除用戶

這是我刪除用戶的方法....

FIRAuth.auth()?.signIn(withEmail: (emailTextField?.text)! , password: (passwordTextField?.text)!, completion: { (user, error) in 
      if error == nil { 
       print("User Authenticate!!!") 
       let user = FIRAuth.auth()?.currentUser 

       user?.delete(completion: { (error) in 
        if error != nil { 
         print("Error unable to delete user") 

        } else { 

         DataService.ds.deleteCurrentFirebaseDBUser() 
         KeychainWrapper.standard.removeObject(forKey: KEY_UID) 
         self.performSegue(withIdentifier: "goToLogin", sender: nil) 
        } 
       }) 

      } else { 
       //Password was wrong, unable to authenicate user. Data is not updated 
       print("!!!ALERT!!! Unable to authenticate user") 
       let alert = UIAlertController(title: "Incorrect Password", message: "Please re-enter your password", preferredStyle: UIAlertControllerStyle.alert) 
       alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)) 
       self.present(alert, animated: true, completion: nil) 
      } 

     }) 

火力地堡規則:

{ 
"rules": { 
    "users": { 
     "$uid": { 
     ".read": "$uid === auth.uid", 
     ".write": "$uid === auth.uid" 
     } 
    } 
    } 
} 

數據庫:

App 
    -> users 
      -> 
      4erkjkl543jfe46 
          ->name 
          ->email 

錯誤:

2017-01- 21 21:33:10.321704 APP [11582:4102711] [Fir ebaseDatabase]的setValue:或removeValue:在/用戶/ 4erkjkl543jfe46失敗:PERMISSION_DENIED

可選(錯誤域= com.firebase代碼= 1 「權限被拒絕」 的UserInfo = {NSLocalizedDescription =權限被拒絕})

回答

3

我有同樣的問題。您無法使用您的函數deleteCurrentFirebaseDBUser(),因爲Firebase刪除功能(如果成功)會刪除用戶身份驗證對象,因此在您想要使用deleteCurrentFirebaseDBUser刪除數據庫中的用戶數據時,用戶不再受到身份驗證( )。 目前我在刪除Firebase刪除功能之前刪除數據庫中的用戶數據,這不是理想的解決方案。

+0

有道理。真棒!謝謝,這使它工作。 – Nick

0

我們可以從雙方認證和數據庫中刪除用戶。但在此之前,我們需要先重新認證用戶,然後我們得到最新的令牌以刪除用戶。

下面是漂亮代碼:

let user = Auth.auth().currentUser 
      user?.reauthenticate(with:credential) { error in 
       if let error = error { 
        // An error happened. 
        showAlertWithErrorMessage(message: error.localizedDescription) 
       } else { 
        // User re-authenticated. 
        user?.delete { error in 
         if let error = error { 
          // An error happened. 
          showAlertWithErrorMessage(message: error.localizedDescription) 
         } else { 
          // Account deleted. 
          let userID = HelperFunction.helper.FetchFromUserDefault(name: kUID) 
          Database.database().reference(fromURL: kFirebaseLink).child(kUser).child(userID).removeValue() 

          try! Auth.auth().signOut() 
          showAlertWithErrorMessage(message: "Your account deleted successfully...") 
          return 
         } 
        } 

       } 
      } 

100%在我的項目工作,以及測試