在 Flutter 中使用 Firebase/Google 登录时无法注销并重定向到 LoginPage

mik*_*ssy 5 firebase-authentication google-signin flutter

我正在努力实现一个使用 Firebase 身份验证和 Google-Sign 的 Flutter 应用程序。我已经成功地让 firebaseauth 正常登录/注销,没有问题。根据 authstate 更改,我定向到主页或登录页面。然后我实现了 Google Sign-in,它会自动将用户登录到 firebase。

这有效,我获得了提示等必要的权限。但是当我点击注销时,应用程序不会重定向到登录屏幕。我正在调用 await firebaseAuth.instance.Signout() ......我相信它确实删除了用户......但它不会重定向。然后,当我再次尝试登录时,没有任何反应。

我尝试了许多不同的登录变体。我似乎无法弄清楚为什么它不会在注销时重定向。

这是我登录 Google 和 firebase 的登录逻辑:

    try {
    final GoogleSignInAccount googleSignInAccount =
       await _googleSignIn.signIn();
   final GoogleSignInAuthentication googleSignInAuthentication =
      await googleSignInAccount.authentication;

  final AuthCredential credential = GoogleAuthProvider.getCredential(
    accessToken: googleSignInAuthentication.accessToken,
    idToken: googleSignInAuthentication.idToken,
  );

  final FirebaseUser user = await _firebaseAuth.signInWithCredential(credential);

  assert(!user.isAnonymous);
  assert(await user.getIdToken() != null);

  final FirebaseUser currentUser = await _firebaseAuth.currentUser();
  assert(user.uid == currentUser.uid);
} catch (error) {
  print(error);
}
notifyListeners();
}
Run Code Online (Sandbox Code Playgroud)

这是我在 main.dart 中重定向到适当页面的逻辑:

    home: StreamBuilder(
        stream: _firebaseAuth.onAuthStateChanged,
        builder: (context, snapshot) {
          if(snapshot.hasData){
            return HomePage();
          } else {
            return Login();
          }
        },
      )
Run Code Online (Sandbox Code Playgroud)

这是我对 Signout() 的逻辑

   Future<void> signOut() async {
   await _firebaseAuth.signOut().catchError((error){
   print(error.toString());
   });
   }
Run Code Online (Sandbox Code Playgroud)

就我而言,我不想让用户退出 Google,只想让我的应用程序退出。但我无法弄清楚为什么这不重定向。当我使用带有电子邮件/密码的标准 firebase 登录时,它工作正常。

Gil*_*dré 0

我认为只能像这样在 _googleSignIn 上执行 singOut 操作:

Future<void> signOut() async {
   await _firebaseAuth.signOut().catchError((error){
       print(error.toString());
   });
   await _googleSignIn.signOut();
}
Run Code Online (Sandbox Code Playgroud)