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 中的空未来构建器

无法更新用户显示名称直到我注销并再次登录firebase

当我使用重新加载功能时,Firebase Auth 会注销我吗?

在注销发生之前未保存当前用户的设置

如何从应用程序远程强制注销firebase auth用户