使用电子邮件登录后无法通过 firebase 获取更新的个人资料信息

2023-12-22

我目前正在使用 React Native 开发一个应用程序,我可以设法拥有登录和注册页面,但我的问题如下。 使用 firebase 方法使用电子邮件和密码创建用户后,我想更新个人资料信息(displayName)以便将其显示在主页中。 但似乎注册后页面重定向到主页而没有完成更新

我在导航器堆栈上设置了一个侦听器,以显示有关用户价值的登录/注册页面或主页。

如果我关闭应用程序并在第一次注册成功后重新加载它,则更新设置正确。

我的代码如下 主堆栈代码

function onAuthStateChange(user) {
  setUser(user);
  if (initializing) setInitializing(false);
}
useEffect(() => {
  const subscriber = auth().onAuthStateChanged(onAuthStateChange);
  return subscriber;
}, [];

if (initializing) {
return <LoadingScreen />

if (!user) {
return (
  <NavigationCOntainer>
     <AuthStackScreen />
  </NavigationCOntainer>
 );
}

return (
 <NavigationCOntainer>
    <DrawerStackScreen />
 </NavigationCOntainer>
  

处理注册方法的代码:

function handgleRegister() {
  auth()
    .createUserWithEmailAndPassword(email, password)
    .then(userCred => {
       return userCred.user.updateProfile({
           displayName: name,
       });
    })
    .catch(e => {
    ...
    ...
    });
}

在主页的代码中,我还设置了用户的监听器。 我也尝试过调用该方法:auth().currentUser; 但我遇到了同样的问题,第一次显示时的 displayName 设置为 null,我必须关闭并重新加载应用程序才能显示它。

function onAuthStateChange(user) {
  console.log(user);
}
useEffect(() => {
  const subscriber = auth().onAuthStateChanged(onAuthStateChange);
  return subscriber;
}, [];

日志的结果显示 displayName 为 null,因此我假设注册过程在更新值之前重定向到主页。

有人知道我如何设法在主页屏幕上获取更新值吗?

提前致谢


用户的个人资料信息是从他们的 ID 令牌中获取的,Firebase 会在用户登录(或创建)时获取该令牌,然后每小时自动刷新一次。如果用户的个人资料在该小时内更新,客户端可能会显示过时的个人资料信息,直到刷新令牌。

您可以通过以下方式强制刷新令牌:

  1. 将用户注销并重新登录。
  2. Calling User.reload https://firebase.google.com/docs/reference/js/firebase.User#reload or User.getIdToken(true) https://firebase.google.com/docs/reference/js/firebase.User#getidtoken.

这两种情况都会强制客户端刷新 ID 令牌,从而从服务器获取最新的配置文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用电子邮件登录后无法通过 firebase 获取更新的个人资料信息 的相关文章

随机推荐