5

Geçerli kullanıcımı Firebase'den silmek istiyorum. Kimliği doğrulanmış kullanıcı silinir, ancak bu kullanıcının veritabanındaki verilerini silemiyorum. Neyi yanlış yapıyorum?iOS SWIFT: Firebase Veritabanından kullanıcı silinemiyor

Bu benim silme kullanıcı yöntemi ....

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

     }) 

Firebase Kuralları geçerli:

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

Veritabanı:

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

HATALAR:

2017-01- 21 21: 33: 10.321704 APP [11582: 4102711] [Köknar ebaseDatabase] setValue: ya removeValue: kullanıcılara/at/4erkjkl543jfe46 başarısız oldu: permission_denied

Opsiyonel (hata Alan = com.firebase 1 UserInfo = {NSLocalizedDescription = İzin verilmedi} "İzin verilmedi" = Code) ben

cevap

3

aynı konuya sahip. DeleteCurrentFirebaseDBUser() işlevini kullanamazsınız çünkü Firebase silme işlevi (eğer başarılıysa) kullanıcı auth nesnesini kaldırır, sonuçta kullanıcının deleteCurrentFirebaseDBUser ile veritabanında kullanıcı verilerini silmek istediğinizde artık kimliği doğrulanmaz). Şu anda Firebase silmeden önce kullanıcı verilerini veritabanında siliyorum, ki bu ideal çözüm değil.

+0

mantıklı test:

İşte güzel bir koddur. Korku veren !! Teşekkürler, bu işe yaradı. – Nick

0

Biz bundan önce yan kimlik doğrulama ve database.But hem kullanıcıyı silebilirsiniz biz ilk o zaman kullanıcıyı silmek son jetonu almak kullanıcıyı reauthenticate gerekir.

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% projemde çalışan ve iyi