You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase用户长时间登录后修改密码请求setAccountInfo返回400错误如何解决

问题根因

你可以先在现有代码的error回调中打印error.code,大概率返回值为auth/requires-recent-login。Firebase Auth 要求修改密码、删除账号这类敏感操作必须基于用户近期的登录凭证,用户登录后长时间未操作,当前用户的登录态新鲜度不满足敏感操作校验,就会触发该400错误。

修复方案

核心逻辑是先捕获需要重新认证的错误,触发用户重新验证身份后再执行修改密码操作,参考改造后的代码如下:

const password = changePasswordFrom.value.password;
// 若使用firebase web v9+版本,按如下引入对应方法;旧版本请对应调整API写法
import { EmailAuthProvider, reauthenticateWithCredential } from "firebase/auth";

this._firebaseAuth.currentUser.then(async user => {     
  if (!user) return;
  try {
    await user.updatePassword(password);
    // 原有修改密码成功的业务逻辑
    // some code
  } catch (error) {
    // 判断是否为需要近期登录的校验错误
    if (error.code === 'auth/requires-recent-login') {
      try {
        // 此处替换为你的业务UI弹窗,让用户输入当前登录的密码完成身份校验
        const currentPassword = prompt('请输入当前登录密码以完成身份验证');
        // 若使用手机号/第三方登录方式,请对应替换AuthProvider的凭证生成逻辑
        const credential = EmailAuthProvider.credential(
          user.email,
          currentPassword
        );
        // 执行重新认证
        await reauthenticateWithCredential(user, credential);
        // 重新认证成功后再次调用修改密码接口
        await user.updatePassword(password);
        // 原有修改密码成功的业务逻辑
        // some code
      } catch (reauthError) {
        // 重新认证失败的错误处理,比如密码输入错误、用户取消操作等
        // error
      }
    } else {
      // 其他类型错误的原有处理逻辑
      // error
    }
  }
});

补充说明

  • 若你的业务使用手机号、谷歌/微信等第三方登录方式,不需要要求用户输入密码,只需要替换EmailAuthProvider为对应登录方式的Provider,生成合法凭证后执行重新认证即可
  • 禁止硬编码用户当前密码,必须通过交互让用户主动输入验证信息,符合安全规范

内容的提问来源于stack exchange,提问作者Atanas Ivanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:24:03