{React Native} Firebase-导航前更新用户值仅在软刷新后才能起作用

时间:2020-05-13 05:41:09

标签: reactjs firebase react-native firebase-authentication react-navigation

我有这个简单的代码

 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()的顺序有误吗?承诺订单不正确吗?

我感谢任何建议!

2 个答案:

答案 0 :(得分:2)

updateCurrentUser不会触发onAuthStateChanged

MSDN

因此,我们需要在更新后重新加载/强制更新当前用户

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')
}