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

Azure B2C启用自助重置密码的登录注册用户流返回undefined问题

问题:Azure B2C 注册登录用户流启用自助重置密码后,未注册邮箱找回密码返回undefined错误

场景说明

  • 已配置Azure B2C注册登录用户流,并启用自助密码重置(Self-service password reset),复用该用户流处理找回密码流程
  • 测试未注册邮箱时,OTP能正常发送并验证,但未触发预期的“无法找到提供的用户ID对应的账户”提示,反而返回undefined错误
  • 单独使用专门的找回密码用户流时无此问题

(注:配置界面显示注册登录用户流已勾选自助密码重置选项;错误界面显示返回undefined提示)

原因分析

注册登录用户流(Sign-up and sign-in)的自助密码重置逻辑,默认流程是先完成OTP验证,再校验用户是否存在。而单独的找回密码用户流(Password reset)是先校验用户存在性再发送OTP,二者流程差异导致:当未注册邮箱在组合流中完成OTP验证后,后端找不到对应用户,未被正确处理的异常返回undefined。

解决方案

方案1:自定义用户流内容定义

  1. 登录Azure门户,进入目标B2C租户
  2. 进入用户流,选择对应的注册登录用户流
  3. 点击左侧内容定义,找到api.selfasserted.passwordreset内容定义
  4. 编辑页面布局,添加错误处理逻辑:
    • 在页面JavaScript中捕获验证后的后端错误,识别用户不存在的错误场景,替换提示信息
    • 示例代码:
      window.addEventListener('DOMContentLoaded', () => {
          const form = document.getElementById('passwordResetForm');
          form.addEventListener('submit', (e) => {
              fetch(form.action, {
                  method: 'POST',
                  body: new FormData(form)
              }).then(res => {
                  if (!res.ok) {
                      return res.json().then(err => {
                          if (err.error?.description.includes('User not found')) {
                              document.getElementById('errorMessage').textContent = '无法找到提供的用户ID对应的账户';
                              e.preventDefault();
                          }
                      });
                  }
              });
          });
      });
      
  5. 保存配置后测试流程

方案2:使用独立找回密码用户流

直接改用专门的找回密码用户流处理密码重置请求,该流原生支持先校验用户存在性,再发送OTP,能正确触发预期的错误提示,无需额外配置。

方案3:通过自定义策略控制流程

若需更灵活的逻辑,可使用Azure B2C自定义策略修改流程:

  1. 在自定义策略的<UserJourneys>中,为密码重置步骤添加用户存在性校验
  2. 使用AAD-UserReadUsingEmailAddress技术配置文件,在发送OTP前查询用户是否存在
  3. 若未查询到用户,直接抛出自定义错误并终止流程,展示预期提示

内容的提问来源于stack exchange,提问作者Springy Developer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:40:34