Flutter firebase log in user devuelve un NULL currentUser después de iniciar sesión
Cuando me autentico en firebase usando la API signInWithEmailAndPassword (), no puedo obtener un usuario "actual" válido.
- Me registro en la aplicación con nombre de usuario y contraseña.
auth.signInWithEmailAndPassword()
Una vez que inicié sesión, se lleva al usuario a una página de inicio
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
¿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 .
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.
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;
});
}
}