firebase.auth().CurrentUser.uid在成功登录后为null

firebase.auth().CurrentUser.uid在成功登录后为null,firebase,firebase-authentication,Firebase,Firebase Authentication,我已使用firebase登录。它正在成功登录。我有四个网页内登录页面配置文件,出售,购买和关于我们。当我在profile和sell页面中检索当前用户的uid值时。但我在购买页面上变为空,为什么会这样 JS 用于用户页 function save_user() { const uid = document.getElementById('user_id'); const userpwd = document.getElementById('user_p

我已使用firebase登录。它正在成功登录。我有四个网页内登录页面配置文件,出售,购买和关于我们。当我在profile和sell页面中检索当前用户的uid值时。但我在购买页面上变为空,为什么会这样

JS 用于用户页

function save_user()
      {
     const uid = document.getElementById('user_id');
            const userpwd = document.getElementById('user_pwd');
            const btnregister=document.getElementById('btn-action');
            //btnregister.addEventListener('click', e=>
            //{
            const email=uid.value;
            const pass=userpwd.value;
            firebase.auth().signInWithEmailAndPassword(email, pass).catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    console.log(error.Message);

});
firebase.auth().onAuthStateChanged(function(user) {
  if(user) {
    window.location='userpage.html'; 
  }
});
JS

对于firebase.auth().currentUser.uid显示空代码的购买页面

var fbRef = firebase.database().ref().child("Sell_Products");
    var user = firebase.auth().currentUser.uid; 
alert(user);    /*Here it's showing null
fbRef.on("child_added", snap => {
    var key=snap.key;
    alert('HEllo');
    alert(key);
    var name = snap.child("name").val();
    var price = snap.child("price").val();
    var category = snap.child("category").val();
    var description = snap.child("description").val();
    var image = snap.child("image").val();
    $("#ex-table").append("<tr><td><a href=\"auction.html?itemKey="+key+"\"><img src=" + image + "/img></a></td><td>" + name + "</td><td>" + price + "</td><td>" + category + "</td><td>" + description + "</td></tr>" );
});
var fbRef=firebase.database().ref().child(“销售产品”);
var user=firebase.auth().currentUser.uid;
警报(用户)/*这里显示为空
fbRef.on(“添加的子对象”,快照=>{
var key=snap.key;
警惕(“你好”);
警报(键);
var name=snap.child(“name”).val();
var price=snap.child(“price”).val();
var category=snap.child(“category”).val();
var description=snap.child(“description”).val();
var image=snap.child(“image”).val();
$(“#ex table”)。追加(“+name+”“+price+”“+category+”“+description+”);
});

获取loggedin用户的推荐方法是您在userPage上处理重定向的方式(与观察者一起):

资料来源:

编辑:所以您应该有如下内容:

var fbRef = firebase.database().ref().child("Sell_Products");

firebase.auth().onAuthStateChanged(function(user) {
    if (user) {
        console.log(user);
        var user = firebase.auth().currentUser.uid; 
        alert(user);    //you should have your user here!
        fbRef.on("child_added", snap => {
            var key=snap.key;
            alert('HEllo');
            alert(key);
            var name = snap.child("name").val();
            var price = snap.child("price").val();
            var category = snap.child("category").val();
            var description = snap.child("description").val();
            var image = snap.child("image").val();
            $("#ex-table").append("<tr><td><a href=\"auction.html?itemKey="+key+"\"><img src=" + image + "/img></a></td><td>" + name + "</td><td>" + price + "</td><td>" + category + "</td><td>" + description + "</td></tr>" );
        });
    } else {
        console.log('No user is signed in.');
    }
});
var fbRef=firebase.database().ref().child(“销售产品”);
firebase.auth().onAuthStateChanged(函数(用户){
如果(用户){
console.log(用户);
var user=firebase.auth().currentUser.uid;
提醒(用户);//您应该让您的用户在这里!
fbRef.on(“添加的子对象”,快照=>{
var key=snap.key;
警惕(“你好”);
警报(键);
var name=snap.child(“name”).val();
var price=snap.child(“price”).val();
var category=snap.child(“category”).val();
var description=snap.child(“description”).val();
var image=snap.child(“image”).val();
$(“#ex table”)。追加(“+name+”“+price+”“+category+”“+description+”);
});
}否则{
log('没有用户登录');
}
});

我也遇到了这样的问题。实际上,在未初始化身份验证之前,它无法显示某些数据,但当我们使用
firebase.auth().CurrentUser
时,它甚至在身份验证初始化之前就获取数据。您可以在代码中设置一个超时,直到auth完全初始化

我使用这种方法来获取数据

const authPromise=()=>{
    return new Promise((resolve,reject)=>{
        const user = firebase.auth().currentUser;
        console.log(user.email)
    })
}

setTimeout(authPromise,2000)

请有人帮忙!!!我已经写了一篇关于这方面的最佳实践的文章。请您详细说明一下好吗?我已经在您的原始代码的基础上添加了代码。顺便问一下,为什么要在那里获取当前用户?只是为了验证他们是否登录?基本上,我是在我的一个网页中检索信息。发布后,我实际遇到的问题是,有时我获取的uid为空,但当我重新启动浏览器或清理缓存时,获取uid工作正常。为什么会发生这种情况?在chrome developer tools上,检查“应用程序”选项卡,然后是“本地存储”,在那里你应该有一个登录用户的条目(通常命名为“localhost:4200”),清除该条目。请再次登录并测试代码。
const authPromise=()=>{
    return new Promise((resolve,reject)=>{
        const user = firebase.auth().currentUser;
        console.log(user.email)
    })
}

setTimeout(authPromise,2000)