Firebase身份验证onAuthStateChanged在函数主体后响应

时间:2020-02-01 03:40:32

标签: javascript reactjs firebase firebase-authentication

我正在使用Firebase创建一个应用程序。加载任何页面时,我正在通过以下代码检查身份验证。当我从登录页面调用isAuthenticated时,即使用户已经登录并且持久性为LOCAL(https://firebase.google.com/docs/auth/web/auth-state-persistence),其返回的false也将返回false,然后执行内部函数。

authentication.ts

import {auth} from "../firebase";

export function isAuthenticated() {
    console.log("Started!");
    auth.onAuthStateChanged(function(user) : boolean {
        console.log("Coming inside authentication");
        if (user) {
            console.log('User signed in - auth success! ', user.email);
            return true;
        } else {
            console.log('User not signed in - auth failed! ');
            return false;
        }
    });
    console.log("Something wrong, coming here!");
    return false;
};

enter image description here

即使在内部onAuthStateChanged函数运行之前,我也变得虚假了。请看屏幕截图。

如何确保始终获得内部函数的返回值。

1 个答案:

答案 0 :(得分:1)

auth.onAuthStateChanged没有返回任何有用的信息。它异步添加了一个侦听器,该侦听器在用户登录或注销时都会被调用。立即知道用户状态不是很有用,并且不能简单地从回调中返回值以用于封闭函数中。

如果您想立即知道用户当前是登录还是注销,则应该使用auth.currentUser来获取User对象。如果用户已注销,则为null。但是,这种状态会随着时间而改变。如果您对随时间的变化感兴趣,请改用监听器。

相关问题