Flutter firebase zalogowany użytkownik zwraca wartość currentUser o wartości NULL po zalogowaniu

Dec 10 2020

Podczas uwierzytelniania w Firebase przy użyciu funkcji API signInWithEmailAndPassword () nie mogę uzyskać prawidłowego „bieżącego” użytkownika.

  1. Loguję się do aplikacji za pomocą nazwy użytkownika i hasła
auth.signInWithEmailAndPassword()
  1. Po zalogowaniu się użytkownik zostaje przeniesiony na stronę główną

  2. Próbuję uzyskać identyfikator UID użytkownika, ale nie zwrócono prawidłowego użytkownika. Wywołanie odbywa się w funkcji asynchronicznej jako takiej:

currentUser = await auth.currentUser();

currentUser ma wartość null.

Jakieś pomysły, co może być tego przyczyną?

Odpowiedzi

1 Keita Dec 10 2020 at 00:08

Co się stanie, jeśli ponownie załadujesz zwrócony FirebaseUser? To zadziałało dla mnie.

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

Wyraźnie uproszczony kod. Uwaga: auth.currentUser () to teraz auth.currentUser.

To może być duplikat: Flutter Firebase Authentication currentUser () zwraca null .

1 DougStevenson Dec 10 2020 at 00:10

Dokumentacja sugeruje użycie obserwatora stanu uwierzytelniania w celu uzyskania wywołania zwrotnego, gdy użytkownik jest zalogowany, a obiekt użytkownika jest dostępny. Jak pokazano w tej połączonej dokumentacji:

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

Sugeruję nie powołując się na currentUser, jak to można sprawdzić tylko na chwilę w czasie. Obserwator na pewno poinformuje Cię, kiedy obiekt użytkownika będzie dostępny do użycia.

HarshSingh Dec 19 2020 at 03:10

po uzyskaniu użytkownika po prostu załaduj go ponownie, gdy rozwiąże to kod problemu w celach informacyjnych: 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;
      });
    }
  }