webentwicklung-frage-antwort-db.com.de

So erzwingen Sie die Abmeldung des Firebase-Authentifizierungsbenutzers aus der App

Ich habe ein Projekt, das firebase auth mit firebaseUI verwendet, um Benutzer zu authentifizieren. Ich habe Google, Facebook und E-Mail-Anbieter aktiviert. Was ich brauche, ist die entfernte Abmeldung oder Deaktivierung einiger Benutzer.

Ich möchte, dass sich die Benutzer dazu von der App abmelden. Ich habe versucht, den Benutzer in der Firebase-Konsole zu deaktivieren, und das Firebase-Admin-SDK ( https://firebase.google.com/docs/auth/admin/manage-sessions ) verwendet, um die Aktualisierungstoken zu widerrufen.

Ich wartete mehr als 2 Tage und bemerkte immer noch, dass der Benutzer angemeldet war und auf die Firestore-Daten zugreifen konnte.

Ich habe es auch durchgemacht und versucht Firebase ruft authData nach dem Löschen immer noch ab

Kann jemand darauf verweisen, was ich falsch mache?

6
Ashwin Valento

Sie können Nachrichtendaten mit FCM senden, um das Abmelden zu erzwingen. 

Zum Beispiel, wenn die Benutzer die Android-Anwendung verwenden. 

  1. Speichern Sie das FCM-Token in einer Sammlung in Firebase Realtime.
  2. konfigurieren Sie die Android-Client-App im Dienst. LINK Wenn Sie eine Nachricht mit einer bestimmten Zeichenfolge erhalten, müssen Sie dies zum Abmelden erzwingen.
  3. machen Sie den Auslöser, den Sie in Cloud-Funktionen benötigen, um die Daten zu senden LINK , wenn Sie den Benutzer abmelden möchten. 

ERFOLG! 

3

Sie können einen Benutzer auch nicht remote dazu zwingen, abgemeldet zu werden. Jede Abmeldung muss von dem Gerät erfolgen, auf dem der Benutzer angemeldet ist.

Es ist nicht möglich, ein Zugriffstoken zu widerrufen, sobald es geprägt ist. Dies bedeutet, dass der Benutzer auch bei Deaktivierung des Benutzerkontos bis zu einer Stunde Zugriff haben kann.

Wenn dies zu lang ist, besteht der Trick (wie auch in meiner Antwort auf die Frage, die Sie verlinkt haben) darin, eine Liste der gesperrten Benutzer in Ihrer Datenbank (oder anderswo) zu pflegen und danach in Ihren Sicherheitsregeln (oder einer anderen Berechtigungsschicht) zu prüfen ). 

In der Echtzeitdatenbank können Sie beispielsweise eine Liste der UIDs blockierter Benutzer erstellen:

banned_uids
  uid1: true
  uid2: true

Und prüfen Sie dies in Ihren Sicherheitsregeln mit:

".read": "auth.uid !== null && !root.child('banned_uids').child(auth.uid).exists()"
3

In Ihren Szenarien gehe ich davon aus, dass Sie den Benutzer abmelden müssen, wenn der Benutzer deaktiviert ist .

Verwenden Sie eine globale Variable zum Speichern von TokenNo (möglicherweise in gemeinsamen Einstellungen oder in sqlite):

Fügen Sie Ihrem Manifest folgenden Code hinzu:

<service Android:name=".YourFirebaseMessagingService">
 <intent-filter>
     <action Android:name="com.google.firebase.MESSAGING_EVENT" />
 </intent-filter>
</service>

Fügen Sie folgenden Code in Ihre 

public class LogoutOntokenchange extends FirebaseMessagingService{
   @Override
   public void onNewToken (String token){
     if(TokenNo=>1){ //if tokenNo >=1 means he already logged in
       TokenNo=0;
       FirebaseAuth.getInstance().signOut(); //Then call signout method
     }
     else{
       TokenNo=1; //store token no in db
     }
   }
}

Was geschieht hier:
Wenn ein Benutzer das erste Mal bei NewToken angemeldet ist, dann wird TokenNo von 0 auf 1 aktualisiert.
Wenn Sie einen Benutzer deaktivieren, wird das Token automatisch aktualisiert. Wenn dann OnNewToken aufgerufen wird, wird TokenNo> = 1 angegeben, und der Benutzer wird abgemeldet.

HINWEIS: Wenn sich der Benutzer zum ersten Mal anmeldet. Wenn die Variable TokenNo nicht gespeichert ist, speichern Sie sie als 0 .

Zu Referenzzwecken: https://firebase.google.com/docs/reference/Android/com/google/firebase/messaging/FirebaseMessagingService

2
maneesh

Noch nicht getestet, da unser Backend-Programmierer, der für die Einrichtung der Firestore-Regeln zuständig ist, an diesem Tag nicht mehr vorhanden war. In der Theorie sollte dies jedoch funktionieren: (und ich werde es morgen testen)

Ein FirebaseAuth.AuthStateListener muss für die Bedienung der Benutzeroberfläche basierend auf dem Status des Benutzers verantwortlich sein

Dies kombiniert mit Regeln im Feuerstore 

match /collection
allow read: if isAuth();

Wo isAuth ist:

function isAuth() {
  return request.auth.uid != null;
}

Wenn der Benutzer dann deaktiviert ist, während er angemeldet ist, wenn er versucht, Daten aus der Auflistung zu lesen, sollte er abgelehnt werden, und ein Aufruf von signOut () sollte erfolgen. Der AuthStateListener erkennt sie und signiert der Benutzer raus.

0
AverageJoeDK