로그인 한 Flutter firebase 사용자가 로그인 후 NULL currentUser를 반환합니다.

Dec 10 2020

signInWithEmailAndPassword () API를 사용하여 firebase에서 인증 할 때 유효한 "현재"사용자를 가져올 수 없습니다.

  1. 사용자 이름과 비밀번호로 애플리케이션에 로그인합니다.
auth.signInWithEmailAndPassword()
  1. 로그인하면 사용자가 홈페이지로 이동합니다.

  2. 사용자의 UID를 얻으려고하는데 유효한 사용자가 반환되지 않았습니다. 호출은 다음과 같은 비동기 함수에서 발생합니다.

currentUser = await auth.currentUser();

currentUser가 null입니다.

이 문제의 원인이 될 수있는 아이디어가 있습니까?

답변

1 Keita Dec 10 2020 at 00:08

반환 된 FirebaseUser를 다시로드하면 어떻게 되나요? 이것은 나를 위해 일했습니다.

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

명확하게 단순화 된 코드. 참고 : auth.currentUser ()는 이제 auth.currentUser입니다.

중복 일 수 있습니다. Flutter Firebase 인증 currentUser ()는 null을 반환합니다 .

1 DougStevenson Dec 10 2020 at 00:10

문서는 사용자가 로그인하고 User 객체를 사용할 수있을 때 콜백을 받기 위해 인증 상태 관찰자 를 사용하도록 제안합니다 . 링크 된 문서에 표시된대로 :

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

한 순간에만 확인할 수 있으므로 에 의존 하지 않는 것이 좋습니다 currentUser. 관찰자는 사용자 개체를 사용할 수있는시기를 알려줍니다.

HarshSingh Dec 19 2020 at 03:10

사용자를 얻은 후 참조를 위해 문제 코드를 해결하면 다시로드하십시오.

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;
      });
    }
  }