2016-09-08 8 views
6

Wenn ein Benutzer zu meiner Site kommt, verwende ich onAuthStateChanged, um festzustellen, ob der Benutzer bereits von einer vorherigen Sitzung angemeldet ist oder nicht.onAuthStateChanged inkonsistent

Hauptproblem ist, dass es für einen kleinen Prozentsatz der Benutzer inkonsistent war - Code scheint nicht zu erkennen, dass sie eine gültige angemeldete Sitzung haben.

Der folgende Code ist auf der App selbst, Benutzer sind auf dieser Seite nach einer Weiterleitung von der Startseite oder Login-Seite.

Die Homepage der Website verwendet auch onAuthStateChanged, um festzustellen, ob der Benutzer direkt zur App weitergeleitet werden soll. Die Anmeldeseite verwendet signInWithEmailAndPassword und leitet sie bei erfolgreicher Anmeldung an die App-Seite um (die den folgenden Code enthält).

firebase.auth().onAuthStateChanged(function (authUser) { 
    if (authUser) return initApp(authUser); 

    // issue: sometimes users that *should* be signed-in get signed in anonymously here 
    firebase.auth().signInAnonymously().then(function (authUser) { 
    initApp(authUser); 
    } 
}); 

Ist onAuthStateChanged einfach nicht etwas, was ich für meinen Anwendungsfall verwendet werden sollte? Irgendeine Idee, wie man das verbessert/repariert?

Edit: Dies scheint mehr mit Benutzern auf Handys passieren.

+1

Stellen Sie sicher, dass Sie warten, bis signInWithEmailAndPassword auflösen, bevor Sie auf Ihrer Anmeldeseite weiterleiten. Es könnte sein, dass Sie vorzeitig auf die App-Seite umleiten. Auch Ihr Code oben ruft initApp zweimal bei anonymer Anmeldung auf, da der onAuthStateChanged-Beobachter nach anonymer Anmeldung erneut ausgelöst wird. – bojeil

+0

Vielen Dank. Richtig - der Code läuft wieder, aber ich habe eine 'userInitiated'-Variable in der 'initApp'-Funktion, um Benutzer, die sich bereits angemeldet haben, richtig zu behandeln. Ich brauche die initApp-Funktion, die manchmal aufgerufen wird, um den vorherigen Online-Status wiederherzustellen, obwohl Benutzer aufgrund von Verbindungswiederherstellungen aufgrund von Verbindungsverlusten oder zufälligen Firebase-Wiederverbindungen offline gegangen sind. –

+0

Und ja, ich habe sichergestellt, dass signInWithEmailAndPassword vor der Weiterleitung gelöst wurde. –

Antwort