Firebase Auth无法在Flutter中运行

时间:2018-02-19 16:26:49

标签: firebase google-signin flutter

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

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

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

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

但我注意到,虽然每次用户尚未登录时设备上的可用Google帐户的Signin提示都会发生,但ensureLoggedIn功能的最后一部分(if (auth.currentUser == null))从未获得无论用户是否已登录,都会执行。

我注意到了这一点,因为print('CURRENTUSER');永远不会在控制台中输出,另外因为Firebase Auth控制台中没有创建新用户。有谁知道为什么会这样,我怎么可能解决这个问题?

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

1 个答案:

答案 0 :(得分:2)

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

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