Firebase 在 flutter 中注销后保持用户登录状态

问题描述 投票:0回答:1

我在 flutter 中的目标是确保应用程序在用户注销后关闭。不过,我这里有一个小问题。

在我的应用程序中,系统会询问用户是否要注销,如果按“是”,则会执行以下代码。

         onPressed: () async {
            var auth = FirebaseAuth.instance;
            await auth.signOut();

            FirebaseAuth.instance.authStateChanges().listen((User? user) {
              if (user == null) {
                print('Exiting app');
                exit(8); //this closes the app
              }
            });
          },

但是,这导致我在控制台中收到一条消息,表明用户已注销,然后应用程序按预期关闭。但是,如果我随后打开该应用程序,用户将再次登录。我怎样才能防止这种情况发生?

我的控制台输出(按下按钮后)如下:

D/FirebaseAuth( 2809): Notifying id token listeners about a sign-out event.
D/FirebaseAuth( 2809): Notifying auth state listeners about a sign-out event.
I/flutter ( 2809): Exiting app
flutter firebase firebase-authentication
1个回答
0
投票

出现您面临的问题是因为

exit()
强行关闭应用程序而没有正确保存用户的注销状态。这可能会阻止 Firebase 完全处理注销事件。

相反,请使用

SystemNavigator.pop()
,并确保清除任何已存储的会话(如果使用过它):

onPressed: () async {
  var auth = FirebaseAuth.instance;
  await auth.signOut();  // Signs out the user

  // Clear any local storage or session data
  // For example, using shared preferences:
  SharedPreferences prefs = await SharedPreferences.getInstance();
  await prefs.clear();  // Clear stored user session

  FirebaseAuth.instance.authStateChanges().listen((User? user) {
    if (user == null) {
      print('User logged out successfully');
      SystemNavigator.pop(); // Close the app gracefully
    }
  });
},
© www.soinside.com 2019 - 2024. All rights reserved.