【问题标题】:How to properly implement Logout with firebase on flutter如何在flutter上使用firebase正确实现注销
【发布时间】:2018-08-04 12:07:04
【问题描述】:

这听起来很愚蠢,但我不能真正正确地注销我的应用程序,那是因为我在 MaterialApp 上使用了多个 FirebaseAnimatedList 和路由

routes: <String,WidgetBuilder>{
    '/StartAppPage':(BuildContext context)=>new StartAppPage(),
    '/LoginPage':(BuildContext context)=> new LoginPage(),
    '/HomePage':(BuildContext context)=> new HomePage)
  },

因此,应用程序会根据是否有用户来检查使用情况并路由到主页或登录。

我的主页有一个 FirebaseAnimatedList 和 在我的主页上有一个注销按钮可以执行此操作

await googleSignIn.signOut();
await FirebaseAuth.instance.signOut();
await FirebaseDatabase.instance.goOffline();
return Navigator.pushReplacementNamed(context, '/StartApp');

到主页并注销用户。

但是当另一个用户再次登录时,列表会显示旧用户的数据,并且该列表可以用来弄乱我的数据库

我怎样才能正确实现这一点,setPersistance 关闭或打开都没有区别

解决方案:通过应用保留一个 Firebase 用户实例。我推荐一个全局变量

【问题讨论】:

  • 显示您用来注销用户的方法
  • 这也可能是与您从数据库中传输数据的方式有关的问题
  • 我不明白你,究竟如何?
  • 我的意思是要么您没有正确注销用户,要么您没有以正确的方式查看数据(基于当前用户)
  • 这更有意义,我可以使用正确的用户登录和注销,我正在使用的查询需要我当前的用户详细信息才能执行。它目前正在等待用户在那里显示列表和每个页面都设置了用户。

标签: flutter dart firebase-authentication


【解决方案1】:

退出后,您可以考虑在当前屏幕上检查用户是否已通过身份验证。如果用户仍处于登录状态,则显示数据。如果没有,则导航到登录屏幕。

FirebaseAuth.instance
  .idTokenChanges()
  .listen((User? user) {
    if (user == null) {
      debugPrint('User is currently signed out!');
      // TODO: navigate to Login screen?
    } else {
      debugPrint('User is signed in!');
      // TODO: display data
    }
  });

【讨论】:

    猜你喜欢
    • 2020-06-27
    • 2020-08-30
    • 1970-01-01
    • 2018-11-30
    • 2023-03-26
    • 2019-06-15
    • 1970-01-01
    • 2017-12-18
    • 2019-11-20
    相关资源
    最近更新 更多