获取从登录用户 Firebase 空返回中检索到的个人资料信息



根据我的 Firebase 数据,我正在尝试使用 Firebase 文档中的此示例访问用户信息,例如政府机构和显示名称。当我使用这个例子时,f

{
"users" : {
"citizen" : {
"NiPS4VtdFPgVMVyhCVfMtzdP85g1" : {
"displayName" : "user-citizen",
"email" : "user@user.com",
"password" : "palls123",
"pnumber" : "123",
"repassword" : "palls123"
},
"Pba7iULL4wYkTQxHB5tpbNDj7v02" : {
"displayName" : "kevin",
"email" : "ez@ez.com",
"password" : "palls123",
"pnumber" : "545",
"repassword" : "palls123"
},
"gf2o8dhs9VhIsCK5Ui5rEizESbj1" : {
"displayName" : "kevin",
"email" : "dli@dli.com",
"password" : "palls123",
"pnumber" : "5454",
"repassword" : "palls123"
}
},
"government" : {
"bfp" : {
"AgIqgADtMeNS5d3BJTnCI0uCjcl1" : {
"displayName" : "bfp-user",
"email" : "bfp@bfp.com",
"gov_agency" : "bfp",
"gov_id" : "123",
"password" : "palls123",
"pnumber" : "1234",
"repassword" : "palls123",
"toggle" : true
}
},
"ndrmmc" : {
"XdoC2Dny5ZM69z8B2BrSWBS3CIY2" : {
"displayName" : "ndrmmc-user",
"email" : "ndrmmc@ndrmmc.com",
"gov_agency" : "ndrmmc",
"gov_id" : "123",
"password" : "palls123",
"pnumber" : "123",
"repassword" : "palls123",
"toggle" : true
}
},
"pnp" : {
"MhKiEoCtytQAHooHclSZIB3gsK42" : {
"displayName" : "pnp-user",
"email" : "pnp@pnp.com",
"gov_agency" : "pnp",
"gov_id" : "23455",
"password" : "palls123",
"pnumber" : "1234",
"repassword" : "palls123",
"toggle" : true
}
},
"rta" : {
"fehvPVwX6NXnVkf3hOyRsQBDH2Y2" : {
"displayName" : "rta-user",
"email" : "rta@rta.com",
"gov_agency" : "rta",
"gov_id" : "1234",
"password" : "palls123",
"pnumber" : "123",
"repassword" : "palls123",
"toggle" : true
}
}
}
}

我正在尝试使用Firebase文档中的此示例访问用户信息,例如政府机构和显示名称。当我使用这个例子来自文档时

var user = firebase.auth().currentUser;
if (user != null) {
user.providerData.forEach(function (profile) {
console.log(" Gov Agency : " + profile.gov_agency);
console.log("  Provider-specific UID: " + profile.uid);
console.log("  Name: " + profile.displayName);
});
}

它在我的这边返回 null,除了它为用户提供电子邮件的 uid。我哪里做错了?

PS:有两种类型的用户 政府客户端 和 公民客户端

你得到一个 null 值是正常的profile.gov_agency:如此处所述,用户的providerData属性是一个"非空数组firebase.UserInfo"

反过来,用户信息具有一组定义的属性:emailphoneNumber等。因此,profile没有任何gov_agency属性。

您显然将从firebase.auth中获得的值与您保存在实时数据库中的值混淆了。

因此,您应该根据userIdemail(取决于您的数据模型(查询数据库,以获取gov_agency(和displayName(的值,以"确定它是政府客户端还是公民客户端"。

要查询数据库,请参阅 https://firebase.google.com/docs/database/web/read-and-write 和 https://firebase.google.com/docs/database/web/lists-of-data

请注意,displayName也是UserInfo的属性,但显然您在创建用户时尚未设置它。

文档中的说明:

currentUser 也可能为 null,因为身份验证对象没有 已完成初始化...

尝试:

firebase.auth().onAuthStateChanged(user => {
if (user) {
// User is signed in.
console.log('User is signed in:', user);
} else {
// No user is signed in.
console.log('No user is signed in', user);
}
});

中医国际