Window 加载和 Firebase 身份验证
Window loading and Firebase Authentication
我正在创建一个依赖 Firebase 身份验证并使用 Google Auth 的网站。
用户在单独的页面上登录后,我的网站将用户重定向到“主页”,其中 window 根据登录的用户加载。
但是,如果我检查“window.onload”处是否存在登录用户,它总是错误的。
相反,如果我 运行 一个异步函数,然后在“.then”之后检查登录用户,我会返回 true。
这让我假设“window.onload”的触发速度比页面识别登录用户的速度快。
如何解决此问题并确保在调用我的异步函数之前加载已登录的用户?
我很确定 firebase.auth() 本身是异步的,但出于某种原因 .then 似乎无法使用它。
<script>
window.onload = loadPage();
function loadPage()
{
var user = firebase.auth().currentUser;
if(user)
console.log("userFound before async"); //Does NOT console log
asyncFunction().then(function()
{
var user = firebase.auth().currentUser;
if(user)
console.log("userFound after async"); //Does console log
})
}
</script>
如果您想对当前登录的用户执行某些操作,您应该使用 auth state observer 来注册一个回调,该回调会在首次知道用户对象时调用。如您在问题中所述,当页面最初加载时它不可用。
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
// ...
} else {
// User is signed out.
// ...
}
});
依赖于其他异步函数的完成是不可取的——使用观察者来确定。只要首次确定用户是否已登录,就会调用它,每次登录状态发生变化时都会调用它。
我正在创建一个依赖 Firebase 身份验证并使用 Google Auth 的网站。 用户在单独的页面上登录后,我的网站将用户重定向到“主页”,其中 window 根据登录的用户加载。
但是,如果我检查“window.onload”处是否存在登录用户,它总是错误的。 相反,如果我 运行 一个异步函数,然后在“.then”之后检查登录用户,我会返回 true。
这让我假设“window.onload”的触发速度比页面识别登录用户的速度快。
如何解决此问题并确保在调用我的异步函数之前加载已登录的用户? 我很确定 firebase.auth() 本身是异步的,但出于某种原因 .then 似乎无法使用它。
<script>
window.onload = loadPage();
function loadPage()
{
var user = firebase.auth().currentUser;
if(user)
console.log("userFound before async"); //Does NOT console log
asyncFunction().then(function()
{
var user = firebase.auth().currentUser;
if(user)
console.log("userFound after async"); //Does console log
})
}
</script>
如果您想对当前登录的用户执行某些操作,您应该使用 auth state observer 来注册一个回调,该回调会在首次知道用户对象时调用。如您在问题中所述,当页面最初加载时它不可用。
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
// ...
} else {
// User is signed out.
// ...
}
});
依赖于其他异步函数的完成是不可取的——使用观察者来确定。只要首次确定用户是否已登录,就会调用它,每次登录状态发生变化时都会调用它。