【问题标题】:How to give a custom error message if on Forgotten Password Page of Azure B2C?如果在 Azure B2C 的忘记密码页面上,如何给出自定义错误消息?
【发布时间】:2019-01-10 04:18:59
【问题描述】:

我想在用户访问 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>
..........

我认为我们可以通过结合使用自定义配置文件中的 UserMessageIfClaimsPrincipalDoesNotExist 和 RaiseErrorIfClaimsPrincipalDoesNotExist 来做到这一点。但只是寻找一个捆绑的例子来把这些部分放在一起。

【问题讨论】:

    标签: azure-ad-b2c


    【解决方案1】:

    您可以将声明转换构建为:

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

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

    要确定电话号码声明是否存在,请使用a DoesClaimExist claims transformation

    <ClaimsTransformation Id="DoesPhoneNumberExist" TransformationMethod="DoesClaimExist">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="phoneNumber" TransformationClaimType="inputClaim" />
      </InputClaims>                    
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="phoneNumberDoesExist" TransformationClaimType="outputClaim" />
      </OutputClaims>
    </ClaimsTransformation>
    

    为确保电话号码确实存在,请使用a AssertBooleanClaimIsEqualToValue claims transformation

    <ClaimsTransformation Id="EnsurePhoneNumberDoesExist" TransformationMethod="AssertBooleanClaimIsEqualToValue">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="phoneNumberDoesExist" TransformationClaimType="inputClaim" />
      </InputClaims>
      <InputParameters>
        <InputParameter Id="valueToCompareTo" DataType="boolean" Value="true" />
      </InputParameters>
    </ClaimsTransformation>
    

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

    <TechnicalProfile Id="AAD-UserReadUsingEmailAddress">
      ...
      <OutputClaims>
        ...
        <OutputClaim ClaimTypeReferenceId="phoneNumber" />
      </OutputClaims>
      <OutputClaimsTransformations>
        <OutputClaimsTransformation ReferenceId="DoesPhoneNumberExist" />
        <OutputClaimsTransformation ReferenceId="EnsurePhoneNumberDoesExist" />
      </OutputClaimsTransformations>
      <IncludeTechnicalProfile ReferenceId="AAD-Common" />
    </TechnicalProfile>
    

    然后您必须在 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>
    

    【讨论】:

    • 我们能否在出现此错误消息后将用户重定向到 userjourney 以返回登录页面?还是一般?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    相关资源
    最近更新 更多