[英]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.