firebase.auth()。当前成功登录后,CurrentUser.uid为null

时间:2018-04-03 20:38:54

标签: firebase firebase-authentication

我已经使用了firebase登录。它已成功登录。我在登录页面配置文件中有四页,出售,购买和关于我们。当我在个人资料和销售页面中检索当前用户的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>" );
});

2 个答案:

答案 0 :(得分:1)

获取登录用户的推荐方法是您在userPage上处理重定向的方式(使用观察者):

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    console.log(user);
    // User is signed in.
  } else {
    // No user is signed in.
  }
});

来源:https://firebase.google.com/docs/auth/web/manage-users

编辑:所以你应该有这样的东西:

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.');
    }
});

答案 1 :(得分:0)

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

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

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

setTimeout(authPromise,2000)
相关问题