【问题标题】:FirebaseAuth current user is not returning null after calling sign out?FirebaseAuth当前用户在调用注销后没有返回null?
【发布时间】:2019-03-05 13:58:22
【问题描述】:

我正在尝试注销用户并切换小部件,但在调用以下函数后 -

void logoutUser() async {
    await FirebaseAuth.instance.signOut();
}

如果我检查当前用户,它会返回用户对象,但 ID 为空 -

FirebaseAuth.instance.currentUser()

我尝试在注销后将用户踢出到 main.dart,它会检查用户是否已登录并加载正确的小部件。有谁知道为什么currentUser() 在调用signOut() 后没有返回null?

【问题讨论】:

    标签: firebase authentication firebase-authentication flutter


    【解决方案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 并根据用户当前的登录状态在登录和主页之间切换。
    猜你喜欢
    • 2020-02-04
    • 2020-05-21
    • 2017-04-07
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    相关资源
    最近更新 更多