Flutter firebase log in user devuelve un NULL currentUser después de iniciar sesión

Dec 10 2020

Cuando me autentico en firebase usando la API signInWithEmailAndPassword (), no puedo obtener un usuario "actual" válido.

  1. Me registro en la aplicación con nombre de usuario y contraseña.
auth.signInWithEmailAndPassword()
  1. Una vez que inicié sesión, se lleva al usuario a una página de inicio

  2. Intento obtener el UID del usuario pero no se devuelve ningún usuario válido. La llamada ocurre en una función asíncrona como tal:

currentUser = await auth.currentUser();

currentUser es nulo.

¿Alguna idea de que puede estar causando esto?

Respuestas

1 Keita Dec 10 2020 at 00:08

¿Qué pasa si recargas el FirebaseUser devuelto? Esto funcionó para mí.

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

Código claramente simplificado. Nota: auth.currentUser () ahora es auth.currentUser.

Esto podría ser un duplicado: Flutter Firebase Authentication currentUser () devuelve nulo .

1 DougStevenson Dec 10 2020 at 00:10

La documentación sugiere que utilice un observador de estado de autenticación para obtener una devolución de llamada cuando el usuario haya iniciado sesión y haya un objeto Usuario disponible. Como se muestra en esa documentación vinculada:

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

Sugiero encarecidamente que no confíe en currentUser, ya que eso solo se puede verificar en un momento en el tiempo. Se garantiza que el observador le avisará cuando el objeto de usuario esté disponible para su uso.

HarshSingh Dec 19 2020 at 03:10

después de obtener el usuario, simplemente vuelva a cargarlo una vez que resolverá el código de su problema como referencia: 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;
      });
    }
  }