将Firebase身份验证限制为会话

将Firebase身份验证限制为会话,firebase,flutter,firebase-authentication,Firebase,Flutter,Firebase Authentication,我试图在用户登录时实现一个“让我登录”复选框。如果选中该复选框,则用户应保持登录状态,直到他们明确注销。如果未选中,则用户应在关闭应用程序之前保持登录状态 Flatter Firebase身份验证包没有配置身份验证持续时间的方法,或者至少我没有找到方法 我已尝试使用WidgetsBindingObserver的didChangeAppLifecycleState(..)方法的AppLifecycleState.detached状态来侦听应用程序何时关闭。我可以看到调用的signOut()方法,但

我试图在用户登录时实现一个“让我登录”复选框。如果选中该复选框,则用户应保持登录状态,直到他们明确注销。如果未选中,则用户应在关闭应用程序之前保持登录状态

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

我已尝试使用WidgetsBindingObserver的didChangeAppLifecycleState(..)方法的AppLifecycleState.detached状态来侦听应用程序何时关闭。我可以看到调用的signOut()方法,但尽管如此,用户在下次启动应用程序时仍然保持签名状态。我并不惊讶,因为该应用程序正在退出中。

@override
void didChangeAppLifecycleState(AppLifecycleState state) {
  if( state == AppLifecycleState.detached ){
    FirebaseAuth.instance.signOut();
  }
}
我是否缺少任何好的选项?

这是因为signOut()返回一个未来。所以你必须等待它。因此,假设您有一个函数
userSignOut

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

这应该能解决你的问题。如果仍然不起作用,请提供更多相关代码。

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

如果希望状态不被持久化,则可以通过调用以下命令来配置应用程序启动时的状态:

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

另请参见。

上的颤振火文档。值得注意的是,setPersistence(..)仅在web上受支持。来自文档:“在本机平台上,将抛出未实现的错误”
await FirebaseAuth.instance.setPersistence(Persistence.NONE);