如何从 onAuthStateChanged 方法将 true 或 false 返回到单独文件中的变量

Posted

技术标签:

【中文标题】如何从 onAuthStateChanged 方法将 true 或 false 返回到单独文件中的变量【英文标题】:How to return true or false from onAuthStateChanged method to variable in separate file 【发布时间】:2019-10-01 02:16:31 【问题描述】:

每当用户登录或退出时,我都会尝试从 firebase 方法 onAuthStateChanged 将 true 或 false 返回到我的 app.js 文件中的变量。我有一个类设置来表示 firebase Auth 对象和一个名为 checkUserStatus() 的方法,该方法调用 onAuthStateChanged 方法,如下所示。我在 checkUserStatus 方法中验证了此方法是否正确验证了用户是否使用控制台日志登录。就像现在一样,我在 app.js 中的 userStatus 变量总是返回 false(即使用户已登录)并且它只记录一次——我假设是因为我只调用了一次 checkUserStatus 方法应用程序.js。我不知道如何构造代码,所以每次 onAuthStateChanged 触发时我都会在 app.js 变量中得到一个真值或假值。

     Class Auth 

          checkUserStatus()
            let status = false;
            auth.onAuthStateChanged(user => 
                if (user)
                    console.log('logged in user:', user.email);
                    status = true;
                 else 
                    console.log('user is logged out');
                
              );
              return status;
          
        

// beginning of app.js
let userStatus;

userStatus = auth.checkUserStatus();
console.log(userStatus);

【问题讨论】:

【参考方案1】:

您尝试做的不是听众的工作方式。如果您需要立即检查用户是否已登录,只需查看auth.currentUser。它将为您提供当前登录的用户,如果没有,则为 null。

您将传递给onAuthStateChanged 的侦听器/观察者回调用于响应用户登录状态的变化,而无需使用auth.currentUser 进行检查。它不是用于立即检查,因为您现在正在使用它。

【讨论】:

有道理。谢谢道格。 Doug 回答的一个重要问题是您的代码会导致内存韭菜,因为您没有取消订阅 onAuthStateChanged。请看***.com/questions/37370224/…

以上是关于如何从 onAuthStateChanged 方法将 true 或 false 返回到单独文件中的变量的主要内容,如果未能解决你的问题,请参考以下文章

onAuthStateChanged 不一致

onAuthStateChanged 不一致

.onAuthStateChanged 方法是不是计入 Firebase 身份验证验证?

Firebase 停止监听 onAuthStateChanged

可以使用onAuthStateChanged中的user_id从firebase读取数据

反应原生导航 onAuthStateChanged