2016-08-17 4 views
3

Also habe ich eine einfache App mit Firebase-Authentifizierung (mit nur E-Mail und Passwort) gebaut und es funktionierte großartig, aber um TestFlight meine Anmeldung/Login-Seite musste ich löschen die Konten aller Nutzer, die sich zuvor bei der App angemeldet hatten, nur um festzustellen, dass das Löschen der Nutzer auf der Konsole sie in der App nicht wirklich deaktiviert. Ich würde mir vorstellen, dass es eine Möglichkeit gäbe, den Authentifizierungsstatus eines Benutzers in der Firebase-Konsole zu überprüfen (wenn es sie gibt oder nicht), aber ich kann diese Funktionalität nicht finden, um mein Leben zu retten. Jede Hilfe ist willkommen und geschätzt!Firebase check Auth Status des Benutzers/wenn Benutzer existiert

+3

Wenn sich ein Benutzer bei Firebase Authentication anmeldet, werden zwei Token geprägt. Ein Token identifiziert den Benutzer und läuft nie ab. Der andere wird verwendet, um tatsächlich auf das System zuzugreifen. Letzteres Token läuft nach einer Stunde ab und muss stündlich aktualisiert werden (und wird automatisch vom SDK aktualisiert), was fehlschlägt, wenn Sie das Konto gelöscht oder deaktiviert haben. –

+0

@FrankvanPuffelen das ist eine gute Info, danke. Das Problem, das ich habe, ist, dass die Benutzerinfo immer noch auf dem Gerät als 'currentUser'' FIRUser' Objekt gespeichert ist. Aus diesem Grund habe ich iOS und Android in diesem Artikel getaggt, weil ich denke, dass das Web dieses Problem nicht hat, aber es gilt für Firebase für mobile Geräte (woran ich das Problem habe). –

Antwort

3

Ich stieß auf das gleiche Problem und fand eine Problemumgehung, die ich seitdem verwendet habe. Stattdessen frage ich einfach meine Datenbank in/users ab (eine Kategorie, die ich für Benutzer erstellt habe) und überprüfe, ob meine aktuelle ID existiert. Wenn nicht, weiß ich, dass der Account gelöscht wurde. Dies bedeutet, dass Sie bei der Anmeldung einen Eintrag mit Ihrer Benutzer-ID in/users erstellen müssen und löschen Sie diesen Eintrag, wenn Sie das Konto löschen. Um zu sehen, ob derzeit authentifizierten Benutzer dann gelöscht wird, etwas zu tun wie folgt aus:

NSString *currentID=[[FIRAuth auth].currentUser uid]; 
[[[[[FIRDatabase database]reference]child:@"users"]child:currentID]observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) { 
    if (snapshot!=[NSNull Null]) { 
     //User still exists 
    } else { 
     //Account no longer exists (deleted) 
    } 
}]; 
+2

Gute Eins. Diese Art von Whitelist ist in der Tat eine übliche Methode, um sicherzustellen, dass Sie einen Benutzer sofort sperren können. Angesichts der Bemerkung von OPs über das Vorbereiten für den Testflug könnte ich das Auslaufen des Zugriffstokens als eine vernünftige Alternative empfinden. –

+1

Ja, es ablaufen zu lassen würde gut für die Situation funktionieren, die OP beschreibt. Auch das Implementieren von etwas wie oben wird eine andere Maßnahme sein, um sicherzustellen, dass das Konto nicht gelöscht wird. –

+0

Dies ist keine schlechte Idee, aber scheint ein bisschen langweilig. Hoffentlich kommen sie bald mit einer einfacheren Lösung heraus. Wenn also ein neuer Benutzer erstellt wird, wird der in der App gespeicherte FIRUser überschrieben? –

2

Ich verbrachte den ganzen Tag, da dieses Posting die Whitelist-Lösung zu tun versuchen, und konnte es nicht zu arbeiten. Ein Freund von mir hat mir jedoch eine ähnliche Lösung geschickt und es funktioniert wie ein Zauber.

func checkUserAgainstDatabase(completion: (success: Bool, error: NSError?) -> Void) { 
    guard let currentUser = FIRAuth.auth()?.currentUser else { return } 
    currentUser.getTokenForcingRefresh(true) { (idToken, error) in 
     if let error = error { 
      completion(success: false, error: error) 
      print(error.localizedDescription) 
     } else { 
      completion(success: true, error: nil) 
     } 
    } 
} 
Verwandte Themen