刷新 chrome 页面时用户变为 null flutter web firebase

2023-12-04

我可以在网络中使用 Firebase Auth 正确登录和注册。 当我热重新加载页面时,用户信息将保持不变并且他们保持登录状态。 但是,如果我使用 Chrome 刷新页面,用户将变为空,我需要再次登录。

认证服务:

    static Future<User?> signInUsingEmailPassword(
      {required String email,
      required String password,
      required BuildContext context}) async {
    FirebaseAuth auth = FirebaseAuth.instance;
    User? user;

    try {
      UserCredential userCredential = await auth.signInWithEmailAndPassword(
        email: email,
        password: password,
      );
      user = userCredential.user;
    } on FirebaseAuthException catch (e) {
      if (e.code == 'user-not-found') {
        
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text('Usuário não encontrado.'), duration: Duration(seconds: 4),));
 
      } else if (e.code == 'wrong-password') {
       ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text('Senha inválida.'), duration: Duration(seconds: 4),));
      }
    }

    return user;
  }

主要.dart:

 body: FutureBuilder(future: _initialization, builder: (context, snapshot){
      if(snapshot.hasError){
        return const Center(child: Text('Houve algum erro. Tente novamente'),);
      }
      if(snapshot.connectionState == ConnectionState.done){
        print('usuário: $user');
        print('emailVErified: ${user?.emailVerified}');
        if(user == null || user?.emailVerified == false){
          return const AuthenticationPage();
        }
        if (user != null && user?.emailVerified == true) {
          return const HomePage();
        }
      }
      return const Center(child: CircularProgressIndicator(),);
    },),

这是预期的行为。 Firebase 在用户登录时存储用户凭据,然后在页面(或应用)重新加载时恢复它们。然而,这需要它调用服务器,例如检查帐户是否被禁用,并且当此调用正在进行时,您的代码继续运行并且currentUser is null.

要在恢复登录(或恢复失败)时正确接收,您需要实现一个身份验证状态侦听器,如文档中的第一个片段所示获取当前用户:

FirebaseAuth.instance
  .authStateChanges()
  .listen((User? user) {
    if (user != null) {
      print(user.uid);
    }
  });

所以你可以listen到 auth 状态,或者你可以将它包装在StreamBuilder在你的build方法让您的 UI 响应所有身份验证状态更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

刷新 chrome 页面时用户变为 null flutter web firebase 的相关文章

随机推荐