Azure AD B2C优化邮箱验证:验证成功直接跳转注册页面
Azure AD B2C 邮箱验证成功后自动跳转注册页(原生方案)
针对拆分邮箱验证与注册流程的场景,要去掉验证成功后的Continue按钮、实现自动跳转,可通过自定义策略的原生配置完成,无需依赖JS脚本,具体步骤如下:
1. 调整邮箱验证显示控件的动作配置
在自定义策略的<DisplayControls>节点中,找到emailVerificationControl(或你自定义的验证控件ID),修改其VerifyCode动作的配置,添加自动推进用户旅程的逻辑:
<DisplayControl Id="emailVerificationControl" UserInterfaceControlType="VerificationControl"> <InputClaims> <InputClaim ClaimTypeReferenceId="email" /> </InputClaims> <DisplayClaims> <DisplayClaim ClaimTypeReferenceId="verificationCode" Required="true" /> </DisplayClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="email" /> </OutputClaims> <Actions> <Action Id="SendCode"> <ValidationClaimsExchange> <ValidationClaimsExchangeTechnicalProfile TechnicalProfileReferenceId="AadSspr-SendCode" /> </ValidationClaimsExchange> </Action> <Action Id="VerifyCode"> <ValidationClaimsExchange> <ValidationClaimsExchangeTechnicalProfile TechnicalProfileReferenceId="AadSspr-VerifyCode" /> </ValidationClaimsExchange> <!-- 验证成功后自动推进到下一旅程步骤 --> <ContinueOnSuccess>true</ContinueOnSuccess> </Action> </Actions> </DisplayControl>
核心是添加<ContinueOnSuccess>true</ContinueOnSuccess>,它会在验证码验证通过后,自动触发用户旅程进入下一个步骤,不再停留等待用户点击Continue。
2. 简化用户旅程的编排步骤
在<UserJourneys>中对应注册旅程的<OrchestrationSteps>里,确保邮箱验证步骤之后直接衔接注册页面的步骤,移除中间的确认步骤:
<UserJourney Id="SignUpWithEmailSplit"> <OrchestrationSteps> <!-- 步骤1:邮箱输入与验证码验证 --> <OrchestrationStep Order="1" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="EmailVerificationExchange" TechnicalProfileReferenceId="EmailVerification" /> </ClaimsExchanges> </OrchestrationStep> <!-- 步骤2:直接进入注册信息填写页面 --> <OrchestrationStep Order="2" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="LocalAccountSignUpExchange" TechnicalProfileReferenceId="LocalAccountSignUpWithLogonEmail" /> </ClaimsExchanges> </OrchestrationStep> <!-- 后续的创建用户、令牌颁发等步骤保持不变 --> </OrchestrationSteps> </UserJourney>
3. 确保验证技术配置文件的声明传递正确
检查邮箱验证的技术配置文件(如AadSspr-VerifyCode)的输出声明,保证验证后的邮箱声明能传递到注册步骤:
<TechnicalProfile Id="AadSspr-VerifyCode"> <DisplayName>Verify Code</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AadSsprProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="Operation">VerifyCode</Item> <Item Key="UserMessageIfInvalidCode">Invalid code entered.</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" /> <InputClaim ClaimTypeReferenceId="verificationCode" PartnerClaimType="verificationCode" /> </InputClaims> <OutputClaims> <!-- 确保邮箱声明被正确输出并传递 --> <OutputClaim ClaimTypeReferenceId="email" Persistent="true" /> </OutputClaims> </TechnicalProfile>
注意事项
- 该方案基于Azure AD B2C自定义策略的原生功能,不存在JS脚本的兼容性问题;
- 建议使用最新版本的B2C策略框架(如Build 20230901及以上),确保
<ContinueOnSuccess>属性能正常生效; - 测试时需验证邮箱声明是否能正常传递到注册步骤,避免出现声明缺失导致的流程错误。
内容的提问来源于stack exchange,提问作者Michael Freidgeim
相关产品推荐
相关产品推荐

