Javascript firebase-Reference.set失败:第一个参数在属性';users.undefined.profileImageUrl';

Javascript firebase-Reference.set失败:第一个参数在属性';users.undefined.profileImageUrl';,javascript,firebase,Javascript,Firebase,我是firebase和Javascript的新手,我尝试了许多方法通过user.uid获取用户数据存储,但我得到的只是数据存储在“undefined”下。 var显示名称; var用户信息; var-profile\u-url; $(“#登录btn”)。单击(函数(){ userInfo=firebase.auth().currentUser; 如果(用户信息){ firebase.auth().signOut(); }否则{ var email=document.getElementByI

我是firebase和Javascript的新手,我尝试了许多方法通过
user.uid
获取用户数据存储,但我得到的只是数据存储在“undefined”下。

var显示名称;
var用户信息;
var-profile\u-url;
$(“#登录btn”)。单击(函数(){
userInfo=firebase.auth().currentUser;
如果(用户信息){
firebase.auth().signOut();
}否则{
var email=document.getElementById('login_email')。值;
var password=document.getElementById('login_pw')。值;
firebase.auth(){
document.getElementById('login_bar').style.display=“无”;
document.getElementById('logout_bar').style.display=“内联块”;
document.getElementById('userinfo_-bar').style.display=“内联块”;
document.getElementById('session_bar').style.display=“inline block”;
警报(“登录成功”);
location.replace('board.html');
}).catch(函数(错误){
var errorCode=error.code;
var errorMessage=error.message;
如果(错误代码==='auth/错误密码'){
警报(“密码错误”);
}
否则{
警报(错误消息);
}
控制台日志(错误消息);
}); 
} 
});
$(“#加入btn”)。单击(函数(){
var email=document.getElementById('join_email')。值;
var password=document.getElementById('join_pw')。值;
var displayName=document.getElementById('join_name')。值;
var job=$('input[name=job]:checked').val();
firebase.auth().createUserWithEmailAndPassword(电子邮件,密码)。然后(函数(用户){
var u_Ref=firebase.database().Ref('users/'+user.uid);
userInfo=用户;
u_参考集({
“电子邮件”:电子邮件,
“工作”:工作,
“profileImageUrl”:配置文件\u url,
“uid”:user.uid,
“用户名”:显示名称
});
handleFileSelect();
警惕(“加入成功”);
},函数(错误){
var errorCode=error.code;
var errorMessage=error.message;
警报(错误);
});
如果(电子邮件长度<4){
警报('x');
返回;
}
如果(密码长度<4){
警报('x');
返回;
}
函数initApp(){
firebase.auth().onAuthStateChanged(函数(用户){
如果(用户){
var displayName=user.displayName;
var email=user.email;
var emailVerified=user.emailVerified;
var photoURL=user.photoURL;
var isAnonymous=user.isAnonymous;
var uid=user.uid;
var providerData=user.providerData;
user.updateProfile({
displayName:displayName,
}).然后(函数(){
console.log('success');
}).catch(函数(错误){
console.log('no');
});
userInfo=用户;
firebase.auth().setPersistence(firebase.auth.auth.Persistence.SESSION);
document.getElementById('login_bar').style.display=“无”;
document.getElementById('logout_bar').style.display=“内联块”;
document.getElementById('userinfo_-bar').style.display=“内联块”;
document.getElementById('session_bar').style.display=“inline block”;
$(“#分离条”)。单击(函数(){
user.delete().then(函数(){
警惕(“成功”);
userRef=firebase.database().ref('users/'+user.uid);
userRef.remove();
firebase.storage().ref().child('userImages/'+userInfo.uid).delete();
location.reload();
});
});
$(“#注销栏”)。单击(函数(){
firebase.auth().signOut();
location.reload();
});
}否则{
document.getElementById('login_bar').style.display=“inline block”;
document.getElementById('logout_bar').style.display=“无”;
document.getElementById('userinfo_-bar').style.display=“无”;
document.getElementById('session_bar').style.display=“无”;
} 
});
} 
功能手柄文件选择(evt){
evt.stopPropagation();
evt.preventDefault();
var file=evt.target.files[0];
变量元数据={
“contentType”:file.type
};
var storageRef=firebase.storage().ref().child('userImages/'+userInfo.uid);
storageRef.put(文件、元数据).then(函数(快照){
log('upload',snapshot.totalBytes',bytes');
console.log('文件元数据:',snapshot.metadata);
snapshot.ref.getDownloadURL().then(函数(url){
log('File available at',url);
profile_url=url;
});
}).catch(函数(错误){
控制台。错误('上载失败:',错误);
});
} 

我在你的代码中发现了一个东西,
createUserWithEmailAndPassword
方法返回一个类型的承诺,一个包含凭证和用户结构的对象,因此你在那里犯了一个错误,要求用户的属性uid(返回的承诺),而该属性不存在

应该是这样的:

firebase.auth().createUserWithEmailAndPassword(email, password).then(function(credential) {

      var userInfo = creadential.user;

      var u_Ref = firebase.database().ref('users/' + userInfo.uid);

      u_Ref.set({
        'email' : email,
        'job': job,
        'profileImageUrl':profile_url,
        'uid' : userIfo.uid,
        'username': displayName
      });

@LiOptt在这种情况下,通常情况下,您可能会对firebase的初始化有一些问题,因为您没有分配凭据,它是createUserWithEmailAndPassword方法返回的承诺,在调用该方法并等待解决后,它应该对您可用。