繁体   English   中英

Firebase Auth 在 Flutter 中不起作用

[英]Firebase Auth not working in Flutter

不知何故 Firebase 身份验证在我的实现中不起作用。 我在Firebase Codelab之后使用 Firebase 身份验证实现了 Google 登录,但将ensureLoggedIn function 更改为:

Future<Null> _ensureLoggedIn() async {
  GoogleSignInAccount user = googleSignIn.currentUser;
  print('SIGNIN');
  if (user == null) user = await googleSignIn.signInSilently();
  if (user == null) {
    user = await googleSignIn.signIn();
    print('LOGIN');
  }
  if (auth.currentUser == null) {
    GoogleSignInAuthentication credentials =
        await googleSignIn.currentUser.authentication;
    await auth.signInWithGoogle(
      idToken: credentials.idToken,
      accessToken: credentials.accessToken,
    );
    print('CURRENTUSER');
  }
}

我使用控制台输出来验证 function 的哪些部分被执行。 每次启动应用程序时都会调用 function,方法是在main() function 中调用它

main() async{
     new LinearProgressIndicator(backgroundColor: Colors.lightGreen,);
     await _ensureLoggedIn();
     runApp(new SpringsterApp());
 }

然而,我注意到,尽管每次用户尚未登录时都会出现带有可用 Google 帐户的登录提示,但ensureLoggedIn function 的最后一部分( if (auth.currentUser == null) )无论如何都不会执行用户是否登录。

print('CURRENTUSER');开始我就注意到了这一点永远不会出现在控制台中,而且因为在 Firebase Auth 控制台中没有创建新用户。 有谁知道为什么会发生这种情况以及我该如何解决这个问题?

我的 Firestore 安全规则设置为仅身份验证,因此只要发生此错误,就无法写入或读取任何数据。 提前致谢!

对于任何感兴趣的人,我可以按计划登录:

Future<Null> _ensureLoggedIn() async {
  GoogleSignInAccount user = googleSignIn.currentUser;
  if (user == null) user = await googleSignIn.signInSilently();
  if (user == null) {
    final GoogleSignInAccount googleUser = await googleSignIn.signIn();
    final GoogleSignInAuthentication googleAuth =
    await googleUser.authentication;
    final FirebaseUser user = await auth.signInWithGoogle(
      accessToken: googleAuth.accessToken,
      idToken: googleAuth.idToken,
    );
    assert(user.email != null);
    assert(user.displayName != null);
    assert(!user.isAnonymous);
    assert(await user.getIdToken() != null);

    final FirebaseUser currentUser = await auth.currentUser();
    assert(user.uid == currentUser.uid);
  }
}

我已经初始化了 firebase 应用程序。 但仍然无法连接到 firebase 身份验证。 所以我遵循 pub dev docs firebase_auth

在模拟器上运行。

bool shouldUseFirebaseEmulator = false; // before main()

if (shouldUseFirebaseEmulator) {
    await FirebaseAuth.instance.useAuthEmulator('localhost', 9099);
} // inside main()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM