如果在 Azure B2C 的忘记密码页面上,如何给出自定义错误消息?

Chr*_*s T 3 azure-ad-b2c

我想在用户访问 B2C 的忘记密码页面时添加自定义消息。当他们输入他们的电子邮件地址并且没有找到他们的“电话号码”时,它应该只是在“继续/取消”按钮下显示一条错误消息,上面写着“未注册,联系支持”(也可以在电子邮件文本框上)如果在它下面做太多事情,就会出现正常的错误消息)

我有用户旅程和编排步骤来检测电话号码是否存在的先决条件。但不确定如何执行此自定义错误消息。以下旅程的顺序 2 需要该步骤来显示该错误消息并完成(不运行进一步的步骤)

 <UserJourney Id="PasswordReset">
  <OrchestrationSteps>
    <OrchestrationStep Order="1" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="PasswordResetUsingEmailAddress" TechnicalProfileReferenceId="LocalAccountDiscoveryUsingEmailAddress" />
      </ClaimsExchanges>
    </OrchestrationStep>
    <OrchestrationStep Order="2" Type="ClaimsExchange">
      <Preconditions>
        <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
          <Value>phonenumber</Value>
          <Action>SkipThisOrchestrationStep</Action>
        </Precondition>           
      </Preconditions>  
      <ClaimsExchanges>
        <ClaimsExchange Id="PasswordResetUsingEmailAddressExchange" TechnicalProfileReferenceId="LocalAccountDiscoveryUsingEmailAddressOTP" />
      </ClaimsExchanges>
    </OrchestrationStep>
..........
Run Code Online (Sandbox Code Playgroud)

我认为我们可以通过使用 UserMessageIfClaimsPrincipalDoesNotExist 和 RaiseErrorIfClaimsPrincipalDoesNotExist 之类的东西来实现,就像在自定义配置文件中发现的那样。但只是寻找一个捆绑的例子来把这些碎片放在一起。

Chr*_*ett 6

您可以构建声明转换以:

  1. 确定电话号码声明是否存在
  2. 确保它确实存在,如果不存在则显示错误消息

您必须在检索用户帐户时引用这些声明转换,以便在第一步中显示错误消息。

要确定是否电话号码要求确实存在,你可以使用一个DoesClaimExist声明转换

<ClaimsTransformation Id="DoesPhoneNumberExist" TransformationMethod="DoesClaimExist">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="phoneNumber" TransformationClaimType="inputClaim" />
  </InputClaims>                    
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="phoneNumberDoesExist" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
Run Code Online (Sandbox Code Playgroud)

为了确保该电话号码确实存在,你可以使用一个AssertBooleanClaimIsEqualToValue声明转换

<ClaimsTransformation Id="EnsurePhoneNumberDoesExist" TransformationMethod="AssertBooleanClaimIsEqualToValue">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="phoneNumberDoesExist" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="valueToCompareTo" DataType="boolean" Value="true" />
  </InputParameters>
</ClaimsTransformation>
Run Code Online (Sandbox Code Playgroud)

要显示错误消息,您必须从AAD-UserReadUsingEmailAddress技术配置文件调用声明转换:

<TechnicalProfile Id="AAD-UserReadUsingEmailAddress">
  ...
  <OutputClaims>
    ...
    <OutputClaim ClaimTypeReferenceId="phoneNumber" />
  </OutputClaims>
  <OutputClaimsTransformations>
    <OutputClaimsTransformation ReferenceId="DoesPhoneNumberExist" />
    <OutputClaimsTransformation ReferenceId="EnsurePhoneNumberDoesExist" />
  </OutputClaimsTransformations>
  <IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>
Run Code Online (Sandbox Code Playgroud)

然后您必须在LocalAccountDiscoveryUsingEmailAddress技术配置文件中包含UserMessageIfClaimsTransformationBooleanValueIsNotEqual元数据:

<TechnicalProfile Id="LocalAccountDiscoveryUsingEmailAddress">
  ...
  <Metadata>
    ...
    <Item Key="UserMessageIfClaimsTransformationBooleanValueIsNotEqual">Whoops, you aren't registered, contact Support.</Item>
  </Metadata>
  ...
  <ValidationTechnicalProfiles>
    <ValidationTechnicalProfile ReferenceId="AAD-UserReadUsingEmailAddress" />
  </ValidationTechnicalProfiles>
</TechnicalProfile>
Run Code Online (Sandbox Code Playgroud)