Der angemeldete Benutzer der Flutter Firebase gibt nach der Anmeldung einen NULL currentUser zurück

Dec 10 2020

Bei der Authentifizierung in Firebase mithilfe der signInWithEmailAndPassword () -API kann kein gültiger "aktueller" Benutzer abgerufen werden.

  1. Ich melde mich mit Benutzername und Passwort bei der Anwendung an
auth.signInWithEmailAndPassword()
  1. Ich habe mich einmal angemeldet, der Benutzer wird auf eine Homepage weitergeleitet

  2. Ich versuche, die UID des Benutzers abzurufen, aber es wird kein gültiger Benutzer zurückgegeben. Der Aufruf erfolgt in einer asynchronen Funktion als solcher:

currentUser = await auth.currentUser();

currentUser ist null.

Irgendwelche Ideen, was dies verursachen könnte?

Antworten

1 Keita Dec 10 2020 at 00:08

Was ist, wenn Sie den zurückgegebenen FirebaseUser neu laden? Das hat bei mir funktioniert.

const User currentUser = await auth.currentUser;
if (currentUser != null) {
  await currentUser.reload();
}

Klar vereinfachter Code. Hinweis: auth.currentUser () ist jetzt auth.currentUser.

Dies kann ein Duplikat sein: Flutter Firebase-Authentifizierung currentUser () gibt null zurück .

1 DougStevenson Dec 10 2020 at 00:10

In der Dokumentation wird vorgeschlagen, dass Sie einen Auth-Statusbeobachter verwenden , um einen Rückruf zu erhalten, wenn der Benutzer angemeldet ist und ein Benutzerobjekt verfügbar ist. Wie in dieser verknüpften Dokumentation gezeigt:

FirebaseAuth.instance
  .authStateChanges()
  .listen((User user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

Ich empfehle dringend, sich nicht darauf zu verlassen currentUser, da dies nur zu einem bestimmten Zeitpunkt überprüft werden kann. Der Beobachter teilt Ihnen garantiert mit, wann das Benutzerobjekt zur Verwendung verfügbar ist.

HarshSingh Dec 19 2020 at 03:10

Nachdem Sie den Benutzer dazu gebracht haben, laden Sie ihn einfach neu, sobald er Ihren Problemcode als Referenz löst: D.

final FirebaseAuth _auth = FirebaseAuth.instance;
  User currentuser;
  bool isloggedin= false;
  getUser() async{

    User user =  _auth.currentUser;
    await user?.reload();
    user =  _auth.currentUser;

    if(user !=null)
    {
      setState(() {
        this.currentuser = user;
        this.isloggedin=true;
      });
    }
  }