将Firebase身份验证限制为会话

时间:2020-09-13 22:42:34

标签: firebase flutter firebase-authentication

我正在尝试在用户登录时实施“保持登录状态”复选框。如果选中此复选框,则用户应保持登录状态,直到他们明确注销为止。如果未选中,则用户仅应保持登录状态,直到他们关闭该应用。

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

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

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

我缺少任何好的选择吗?

2 个答案:

答案 0 :(得分:1)

默认情况下,Firebase身份验证SDK将身份验证状态持久保存到本地存储,然后在应用重新启动时从本地存储中还原身份验证状态。

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

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

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

答案 1 :(得分:0)

那是因为signOut()返回了Future。因此,您必须await。因此,假设您有一个函数userSignOut

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

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

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

这应该可以解决您的问题。如果仍然无法使用,请提供更多相关代码。