我有这个简单的代码
state = { email: '', password: '', userName: '', errorMessage: null }
handleSignUp = () => {
firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password).then((userInfo) =>{
userInfo.user.updateProfile({displayName: this.state.userName}).then((s) => {this.props.navigation.navigate('Navigator')})
})
.catch(error => this.setState({ errorMessage: error.message }))
}
一切正常,直到应用程序导航到“导航器”屏幕为止。
在我登录firebase.auth()
时,在这里得到了这个对象:
Object {
"displayName": null,
"email": "test6@gmail.com",
"phoneNumber": null,
"photoURL": null,
"providerId": "password",
"uid": "test6@gmail.com",
},
请注意displayName
如何为空。
这是问题所在... ,只有在进行软刷新后我才能得到:
Object {
"displayName": "Bro",
"email": "test6@gmail.com",
"phoneNumber": null,
"photoURL": null,
"providerId": "password",
"uid": "test6@gmail.com",
},
请注意displayName
现在有一个值。
我想念什么?我使用.then()
的顺序有误吗?承诺订单不正确吗?
我感谢任何建议!
答案 0 :(得分:2)
updateCurrentUser不会触发onAuthStateChanged
因此,我们需要在更新后重新加载/强制更新当前用户
TextWrapping="Wrap"
OR
firebase.auth().currentUser.reload()
像这样
firebase.auth().currentUser.getIdToken(true)
答案 1 :(得分:0)
也许您需要像这样更改方法:
handleSignUp = async () => {
const userInfo = await firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password)
await userInfo.user.updateProfile({displayName: this.state.userName})
this.props.navigation.navigate('Navigator')
}