【问题标题】:Limit Firebase authentication to session将 Firebase 身份验证限制为会话
【发布时间】:2020-09-14 08:36:32
【问题描述】:

我正在尝试在用户登录时实现“保持登录状态”复选框。如果选中该复选框,则用户应保持登录状态,直到他们明确退出。如果未选中,则用户应仅在关闭应用之前保持登录状态。

Flutter Firebase 身份验证包没有配置身份验证持续时间的方法,或者至少我没有找到方法。

我尝试使用 WidgetsBindingObserver 的 didChangeAppLifecycleState(..) 方法的 AppLifecycleState.detached 状态来监听应用何时关闭。我可以看到调用了 signOut() 方法,但尽管如此,用户在下次启动应用程序时仍保持登录状态。鉴于该应用程序正在退出,我并不感到惊讶。

@override
void didChangeAppLifecycleState(AppLifecycleState state) {
  if( state == AppLifecycleState.detached ){
    FirebaseAuth.instance.signOut();
  }
}

我错过了什么好的选择吗?

【问题讨论】:

    标签: firebase flutter firebase-authentication


    【解决方案1】:

    默认情况下,Firebase 身份验证 SDK 将身份验证状态保存到本地存储,然后在应用重新启动时从那里恢复。

    如果您希望状态不被持久化,您可以在应用启动时通过调用进行配置:

    await FirebaseAuth.instance.setPersistence(Persistence.NONE);
    

    另请参阅persisting authentication state 上的 FlutterFire 文档。

    【讨论】:

    • 值得注意的是 setPersistence(..) 仅在 web 上受支持。来自文档:“在本机平台上,将抛出 UnimplementedError”
    【解决方案2】:

    那是因为 signOut() 返回一个 Future。所以你必须await它。所以,假设你有一个函数userSignOut

    Future<void> userSignOut() => FirebaseAuth.instance.signOut();
    

    然后你在按钮上使用它...

    IconButton(
      icon: const Icon(Icons.exit_to_app),
      onPressed: () async {
        await userSignOut();
      },
    )
    

    这应该可以解决您的问题。如果还是不行,请提供更多相关代码。

    【讨论】:

      猜你喜欢
      • 2018-12-14
      • 2015-07-23
      • 2018-03-18
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      相关资源
      最近更新 更多