firebase.auth().CurrentUser.uid在成功登录后为null
我已使用firebase登录。它正在成功登录。我有四个网页内登录页面配置文件,出售,购买和关于我们。当我在profile和sell页面中检索当前用户的uid值时。但我在购买页面上变为空,为什么会这样 JS 用于用户页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
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)