繁体   English   中英

在使用 FirebaseAuth 时,我是否应该在重新加载 Flutter web 应用程序时直接使用 IndexedDB 来确定身份验证 state?

[英]Should I consume IndexedDB directly when reloading a Flutter web app to determine auth state when using FirebaseAuth?

我正在构建一个使用 FirebaseAuth 进行身份验证的 Flutter web 应用程序,并且我试图弄清楚当用户 a) 通过身份验证和 b) 用户刷新 web 页面时如何加载正确的路由。

当应用程序加载时,firebase 被初始化,然后获取用户的身份验证 state,大约 2 秒后在authStateChanges处理程序中返回它。

我遇到的问题是,在返回 auth state 时,我的应用程序已经确定应该向用户显示哪条路线,即登录(因为就应用程序而言,用户尚未通过身份验证) .

这导致用户首先被导航到登录,然后,当 auth state 更新时,他们可以被导航到其他地方——这是一个糟糕的用户体验。

在“持久身份验证状态”部分下的Firebase Auth 文档中,它说“所有平台的 Firebase SDK 提供开箱即用的支持,以确保您的用户身份验证 state 在应用程序重新启动或页面重新加载时保持不变” - 然后继续说“在 web 平台上,用户的身份验证 state 存储在 IndexedDB 中。”

这是否意味着,在页面重新加载时,我需要直接从 IndexedDB 访问用户的身份验证 state? 或者它是否意味着 Firebase 自动返回存储在那里的值?

如果我应该直接使用 IndexedDB,我该怎么做,我应该使用什么密钥?

Firebase 保留并自动恢复用户身份验证 state。 你不需要为此做任何事情。

要响应应用中的身份验证 state 更改,请监听onAuthStateChanged ,如获取当前用户文档中的第一个代码片段所示。 此方法返回 stream,因此如果要在 UI 中显示当前用户,可以使用StreamBuilder

然后当 firebase auth 仍然确定该用户是否通过身份验证时,您可以显示加载屏幕而不是直接显示登录页面。

您可以使用go 路由器的简单方法。

并设置:

GoRouter(
....
initialLocation: LoadingPage(),
redirect: _goTologinPageorHomePageBasedAuthStatus()
..)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM