我正在使用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;
};
即使在内部onAuthStateChanged
函数运行之前,我也变得虚假了。请看屏幕截图。
如何确保始终获得内部函数的返回值。
答案 0 :(得分:1)
auth.onAuthStateChanged
没有返回任何有用的信息。它异步添加了一个侦听器,该侦听器在用户登录或注销时都会被调用。立即知道用户状态不是很有用,并且不能简单地从回调中返回值以用于封闭函数中。
如果您想立即知道用户当前是登录还是注销,则应该使用auth.currentUser来获取User对象。如果用户已注销,则为null。但是,这种状态会随着时间而改变。如果您对随时间的变化感兴趣,请改用监听器。