我正在使用onAuthStateChange根据身份验证状态加载数据。
用户登录后,将加载newsitems。 用户注销后,将从页面中删除newsitems。
firebase.auth().onAuthStateChanged(firebaseUser => {
if(firebaseUser){
// update Newsitems
firebase.database().ref('news').once('value', function(snap){
snap.forEach(snapChild => {
addNewsItemToHTML(snapChild.val(), snapChild.key)
})
})
}
if(!firebaseUser){
document.getElementById('newsitems').innerHTML = '';
document.getElementById('admin').innerHTML = '';
}
});
如果在页面加载时用户已登录,则此方法有效。我可以注销并登录,新站点消失并适当显示。
但是,如果在页面加载时用户未登录,则我登录后将不会显示newsitems。新闻项仅在刷新页面后出现。
我已经研究了几个小时,但找不到答案。我认为,因为页面加载时没有用户,所以不会创建引用。有人可以帮忙吗?
答案 0 :(得分:0)
您不是在调用onAuthStateChanged。相反,您是在告诉Firebase 验证状态更改时呼叫您,这可能会发生 页面重新加载几次。
加载页面时,以前有一个用户签名 在这种情况下,身份验证状态可能会更改几次,而客户端 确定用户的身份验证状态是否仍然有效。对于 因此,您可能会在看到最终结果之前看到没有用户的通话 与实际登录的用户通话。
请考虑在加载页面时将firebase.auth().currentUser
与条件一起使用。 firebase.auth().currentUser
,除非注销,否则将为您提供当前的登录用户。