如何在flutter上使用firebase正确实现注销

Posted

技术标签:

【中文标题】如何在flutter上使用firebase正确实现注销【英文标题】:How to properly implement Logout with firebase on flutter 【发布时间】: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 用户实例。我推荐一个全局变量

【问题讨论】:

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

【讨论】:

以上是关于如何在flutter上使用firebase正确实现注销的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Firebase 正确配置 Flutter 应用程序?

Flutter + Firebase:如何实现“谷歌登录”

在 Flutter 中使用 Firebase 然后(Instagram)进行正确的登录架构

如何使用firebase在flutter中添加推荐程序[关闭]

在 Flutter 上使用电子邮件和密码进行 Firebase 身份验证的示例?

Flutter:一个应用程序中有多个firebase项目,但显示的数据不正确