Firebase Auth 在 Flutter 中不起作用

标签 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 帐户的登录提示,ensureLoggedIn 函数的最后一部分(if ( auth.currentUser == null)) 永远不会被执行,无论用户是否登录。

我注意到这一点是因为 print('CURRENTUSER'); 从未在控制台中输出过,另外因为在 Firebase Auth 控制台中没有创建新用户。有谁知道为什么会这样以及我该如何解决这个问题?

我的Firestore安全规则设置为auth only,所以只要出现这个错误就不能写入或读取数据。提前致谢!

最佳答案

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

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 Auth 在 Flutter 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48870264/

相关文章:

firebase - 添加到特定文档的 map 字段(Flutter Firestore)

flutter - 将flutter应用程序转换为flutter web时出现Dio错误

javascript - 如何使 firebase 对象只写数据不读?

java - 获取 Firebase 子项计数

javascript - firebase 函数 admin SDK 获取当前项目名称/实例

javascript - Casperjs Google 登录 (V2) 无法正常工作

android - 由于后台位置访问,应用程序更新被Google Play拒绝(但我未使用任何后台位置权限)

typescript - Firebase Admin SDK错误: Expression has type `void` .将其作为语句放在自己的行中

android - 如何在 gson 上的 google 单点登录中添加多个系统 sha-keys?

laravel 5.5 通过谷歌登录出现客户端错误