使用电子邮件登录后无法通过 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 获取更新的个人资料信息 的相关文章

  • 为什么当我保存更改时,Expo 没有刷新?

    当我进行更改并保存它们时 模拟器中的应用程序不会刷新 我认为模拟器没有连接到 Metro 服务器 我尝试通过运行清除缓存expo r c 但这没有做任何事情 您是否尝试启用快速刷新 我遇到了同样的问题 但在启用 快速刷新 后 自动刷新再次开
  • ListView无法滚动

    正如你在所附的 GIF 中看到的 我无法滚动浏览ListView 一旦我释放鼠标 视图就会恢复到原始位置 我已经阅读了文档 似乎滚动应该只是工作 这是执行render render function return
  • 使用 jQuery inputmask 插件范围 0-100

    如何创建 0 到 100 范围内的掩码 document ready function masked inputmask 您可以使用jquery inputmask regex extensions js为了那个原因 你可以找到带有所有扩展
  • 我可以在 GWT 中使用第三方 Javascript 库吗

    例如穆工具 用 js 编码对我来说很舒服 但显然不适合所有人 你当然可以 最好的事情就是给自己写一些好看的JavaScript 覆盖类型 http code google com webtoolkit doc latest DevGuide
  • 使用全局变量从内部函数获取空字符串

    请帮助我解决一些小问题 我确信你能做到 D 我试图在 firestore 文档 user cases information 上设置一个字段 其中包含一个字段 case number 首先我声明这个全局变量 private String c
  • websockets 如何处理同一浏览器的两个选项卡

    I have 1 个 PHP 服务器 提供 http 请求 和 1 node js 发布更新的数据消息 每个连接都带有 websocket php 服务器设置其 cookie 在一个浏览器中 此 cookie 可在所有选项卡中使用 当浏览器
  • 使用javascript以编程方式触发iOS safari中的复制菜单?

    我正在尝试实现一种用户友好的方式 将一些文本从文本输入字段复制到 iOS Safari 上的剪贴板 我知道无法在这个平台上以编程方式完成此操作 但我希望能够尽可能地指导用户体验 在 iOS Safari 上 当用户手动突出显示某些文本时 会
  • 如何为 Firebase 云功能设置 vpc 连接器?

    Firebase Cloud Functions 在 GCP 之上运行 因此 它们是否支持使用专有网络连接器 https cloud google com functions docs connecting vpc 我想要实现的目标是限制转
  • 通过 JavaScript 单击按钮/页面提交

    我想了解 asp net 框架如何知道何时单击了按钮 因此一旦收到请求 就会在服务器上触发其单击事件 我需要了解它是如何工作的 因为我想从 JavaScript 触发按钮的服务器单击事件 我能够从 JavaScript 执行页面提交 doc
  • Firebase 身份验证中是否需要 SMS Retriever API 才能进行 otp 自动填充?

    我在用Firebase auth api验证用户电话号码 目前 就我而言 我有一个屏幕 用户在其中输入电话号码 并在第二个屏幕上输入密码 根据文档firebase大多数时候自动检索 OTP 并启动验证过程 所以我的问题是它已经实现了SMS
  • Angular 4 Http POST 不起作用

    我希望每个人都做得很好 我最近开始使用 Angular 4 4 我一直在尝试将数据发布到我的 api 服务器 但不幸的是它不起作用 我花了大约两天的时间 但仍然没有成功 甚至已经尝试过 6 7 篇文章角 io https angular i
  • 可以禁用幻灯片的触摸模拟但不能禁用滚动条(危险的滑动器)吗?

    我的页面上有一个危险的滑动器 它成功地模拟了幻灯片和随附滚动条上的触摸事件 允许单击鼠标并移动以向左或向右滑动幻灯片 这很好 但我现在在滑动器内的幻灯片上调用了可拖动 这意味着我需要停止此触摸模拟 拖动幻灯片并同时移动它们会引起混乱 但仅限
  • ES6 模块范围

    我有代码 lib js var a a export var b b main js console log a a variable is not available in a global scope import b from lib
  • 如何在React中动态分配属性?

    这是一个有两个参数的函数 我要创建的标签的名称 具有以下属性的对象 Using React 我创建一个组件并将该元素渲染到 DOM 问题是我想向元素添加属性 但它不允许循环在元素内设置属性 var Element function elem
  • vuejs中如何获取组件编译后的html内容

    我有一个这样的组件
  • onPress 方法中箭头函数与普通函数的行为

    正在学习 Native React 并学习更多关于 javascript 的知识 所以我仍然不明白它的行为的很多事情 我使用 TouchableOpacity 及其 onPress 属性创建了一个按钮组件 为了让它工作 我必须发送我想要执行
  • 如何在 TypeScript 中使用 navigation.replace ?

    我试图在我的代码中使用它 const navigation useNavigation navigation replace AllFriends 但我不断收到错误消息 Property replace does not exist on
  • Firebase:用户注册后如何进行电话号码验证?

    所以我知道我可以使用电子邮件验证或电话号码验证 但我想做的是在用户注册或登录后进行电话号码验证 如何连接这两种身份验证方法 最后 Firebase中是否有一个函数可以检查用户是否通过电话号码验证 谢谢 即使用户已通过身份验证 您仍然可以使用
  • Vue - 调度完成后调用 store getter?

    我正在使用 Laravel 5 7 Vue2 Vuex 我在调度调用完成后让 Vue 返回存储值时遇到一些困难 我的申请流程如下 我单击一个提交按钮 该按钮调用组件上的 validate Validate 分派到我的 addLease 操作
  • JavaScript 阶乘防止无穷大

    我一直在 JavaScript 中使用这个函数来计算阶乘数 var f function factorial n if n 0 n 1 return 1 if f n gt 0 return f n return f n factorial

随机推荐