FirebaseAuth当前用户在调用注销后没有返回null?
Posted
技术标签:
【中文标题】FirebaseAuth当前用户在调用注销后没有返回null?【英文标题】:FirebaseAuth current user is not returning null after calling sign out? 【发布时间】:2019-03-05 13:58:22 【问题描述】:我正在尝试注销用户并切换小部件,但在调用以下函数后 -
void logoutUser() async
await FirebaseAuth.instance.signOut();
如果我检查当前用户,它会返回用户对象,但 ID 为空 -
FirebaseAuth.instance.currentUser()
我尝试在注销后将用户踢出到 main.dart,它会检查用户是否已登录并加载正确的小部件。有谁知道为什么currentUser()
在调用signOut()
后没有返回null?
【问题讨论】:
【参考方案1】:_auth.currentUser()
可能是returning an anonymous FirebaseUser object。检查isAnonymous
属性。
例子:
auth.currentUser().then((user)
if (user == null || user.isAnonymous)
// what will you do?
return;
setState(()
_uid = user.uid;
);
);
然而,我强烈推荐monitor the onAuthStateChanged stream instead。这样,当用户登录或注销时,您会立即收到通知。
检查this article,它涵盖了它的深度。
【讨论】:
感谢您的回答 Feu 但使用异步是个问题。我无法在我的代码中基于then
切换小部件。如果我这样做,它会在我每次打开我试图避免的应用程序时构建两个小部件,因为它们都很重。
查看文章,也许你可以用Stream Builder
管理它。关于您的问题,isAnonymous
是问题所在吗?
不是 isAnonymous 的问题,而是 then(user) 的问题。如果我这样做,在用户登录的情况下,我最终将构建两个小部件,它们将根据用户登录与否进行切换。我试图避免这种情况,但目前似乎没有任何更清洁的解决方案。
我想出的解决方案是使用 IndexedStack 并根据用户当前的登录状态在登录和主页之间切换。以上是关于FirebaseAuth当前用户在调用注销后没有返回null?的主要内容,如果未能解决你的问题,请参考以下文章
Firebase Auth - 更新用户的电子邮件后,Firebase Auth 会注销用户
主屏幕显示 firebaseAuth Flutter 中的空未来构建器