我一直无法从Firebase中获得显示名称。 下面是注册流程编码
const promise = auth.createUserWithEmailAndPassword(email, pass)
.then(
(user)=>{
// here you can use either the returned user object or
firebase.auth().currentUser. I will use the returned user object
if(user){
user.updateProfile({
displayName: textUsername.val(),
// photoURL: // some photo url
})
}
})
.then( function() {
console.log('User Name Set!')
})
.catch(function() {
console.log('error')
});
promise.catch(e => console.log(e.message));
})
firebase.auth().onAuthStateChanged(firebaseUser => {
if(firebaseUser) {
console.log(firebaseUser)
} else {
console.log('not logged in');
}
})
console.log显示“用户名设置!”并且console.log(firebaseUser)显示displayName是在currentUser的数据库中设置的,名称是我所期望的。 但是,
console.log(firebase.auth().currentUser)
给出null,然后
if (user != null) {
console.log(user.displayName);
}
这也返回null。
我一直在寻找获取Firebase数据集数据的方法,但我无法做到这一点。
如果有人可以给我任何建议,那将是很棒的事情。
谢谢。
答案 0 :(得分:0)
firebase.auth().currentUser.displayName
返回OAuth提供程序的显示名称。但是,firebase.auth().currentUser
异步解析,在页面加载时片刻为空/空。如果将console.log(firebase.auth().currentUser.displayName)
放在.onAuthStateChanged
内,您会看到。
答案 1 :(得分:0)
我最终使用递归来解决这个问题。我希望有一种更优雅的方法,但这是唯一对我有用的方法。如果您使用其他解决方案解决了此问题,请分享!
我需要这个来创建新用户。当有人登录时,它似乎永远不会返回null。
setTimeout()将递归速度降低了0.5秒,这样您就不会因多次调用该函数而出错。您可以通过调整毫秒来加快或降低速度。
工作代码:
auth.onAuthStateChanged(user => {
if (user) {
// Everything inside here happens if user is signed in
console.log(user)
// Greet the user with a message and make it personal by using their display name
injectDisplayName = () => {
if(firebase.auth().currentUser.displayName === null){
console.log('happens');
setTimeout(() => {
injectDisplayName()
}, 500)
} else {
document.getElementById('display-name-header').textContent = `Hello, ${firebase.auth().currentUser.displayName}`
}
}
injectDisplayName()
} else {
// Everything inside here happens if user is not signed in
}
})