it-swarm.com.de

Melden Sie einen Benutzer ordnungsgemäß von der Android-App ab

Ich entwickle eine kleine Android-App, und im Grunde hat sie nur Login- und Logout-Funktionen. Ich verwende Firebase zum Speichern von Benutzerdaten und auch zur Authentifizierung. 

Also habe ich ein Login und es authentifiziert die Benutzer so, wie es sollte, und ich habe mich in dem Sinne abgemeldet, dass es unauthenticates Benutzer ist. Aber muss ich innerhalb der App etwas tun, um die Sitzung zu beenden? 

if (id == R.id.action_log_out) {
    ref.unauth(); //End user session
    startActivity(new Intent(MainActivity.this, LoginActivity.class)); //Go back to home page
    finish();
}        

Funktioniert das so, wie ich denke? Wenn sich jemand abmeldet, sollte es offensichtlich nicht möglich sein, den Zurück-Button zu drücken und auf magische Weise zur letzten Seite zurückzukehren, ohne sich erneut anmelden zu müssen. 

18
John

Wenn Firebase den Benutzer authentifiziert (oder Sie den Benutzer mit Firebase authentifizieren), wird das Token für diesen Benutzer im lokalen Speicher Ihres Geräts gespeichert. Dies geschieht, wenn Sie eine der authWith...-Methoden aufrufen (natürlich nur, wenn der Benutzer erfolgreich authentifiziert wurde).

Beim Aufruf von ref.unauth(); wird dieses Token sofort aus dem lokalen Speicher gelöscht.

Ein ordnungsgemäß implementierter Ablauf würde sie nicht automatisch erneut authentifizieren, wenn der Benutzer die Zurück-Schaltfläche drückt. Dies hängt jedoch von dem Ablauf ab, den Sie implementieren (der in Ihrer Frage fehlt und wahrscheinlich ohnehin zu viel Code wäre).

12

Aus Firebase-Dokumenten

https://firebase.google.com/docs/auth/Android/custom-auth

nennen Sie das FirebaseAuth.getInstance().signOut();

17

Ich sehe zwei Optionen für das Problem, das wir nach dem Abmelden mit dem Zurück-Button haben:

In Ihrer LoginActivity-Aktivität, bei der Sie als Startprogramm aktiv sein sollten, müssen Sie die onBackPressed-Methode überschreiben und leer lassen:

    @Override
public void onBackPressed() {
// empty so nothing happens
}

Oder/und Sie können LoginActivityIntent zu Ihrer LogoutActivty hinzufügen, wenn Benutzer == null ist. Wenn ein nicht authentifizierter Benutzer bei der Aktivität landet, wird er auf diese Weise sofort zur LoginActivity weitergeleitet, obwohl dies irgendwie komisch aussieht.

        mAuth = FirebaseAuth.getInstance();
    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null) {
                // User is signed in
                Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
            } else {
                // User is signed out
                Log.d(TAG,"onAuthStateChanged:signed_out");
                startActivity(new Intent(LogoutActivity.this, LoginActivity.class));
            }
            // ...
        }
    };

Erste Option ist einfacher, aber ich schätze, wenn Sie beide auf der sicheren Seite anwenden ^^ Im Codieren für 2 Wochen, so korrigieren Sie mich, wenn ich falsch liege.

4
Daniel Szy

Sie können finish() durch finishAffinity(); ersetzen. 

1

Löschen Sie Token und Instanz-IDs

String authorizedEntity = PROJECT_ID;  
String scope = "GCM";
FirebaseInstanceID.getInstance(context).deleteToken(authorizedEntity,scope);

Sie können auch die Instanz-ID einschließlich aller zugehörigen Token löschen. Beim nächsten Aufruf von getInstance () erhalten Sie eine neue Instanz-ID:

FirebaseInstanceID.getInstance(context).deleteInstanceID();
String newIID = InstanceID.getInstance(context).getId();
0
Ebin Joy