将 KMSI 从复选框自定义为是或否按钮作为单独的用户旅程

问题描述 投票:0回答:1

我正在为本地帐户登录启用“保持登录状态”设置。

目前,技术配置文件设置如下。

我如何设置单独的技术配置文件来捕获用户的响应,无论用户是加入还是退出 KMSI?另外,如何将 UI/UX 行为更改为“是”或“否”按钮,而不是单个复选框?

索赔提供者:

    <ClaimsProvider>
      <DisplayName>Local Account</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
          <Metadata>
            <Item Key="EnforceEmailVerification">true</Item>
          </Metadata>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="recaptchaResponse" />
          </OutputClaims>
          <ValidationTechnicalProfiles>
            <ValidationTechnicalProfile ReferenceId="REST-VerifyRecaptcha" />
            <ValidationTechnicalProfile ReferenceId="AAD-UserWriteUsingLogonEmail" />
            <ValidationTechnicalProfile ReferenceId="REST-SignUpOrEditProfile" />
          </ValidationTechnicalProfiles>
        </TechnicalProfile>
        <TechnicalProfile Id="ForgotPassword">
          <DisplayName>Forgot your password?</DisplayName>
          <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="isForgotPassword" DefaultValue="true" AlwaysUseDefaultValue="true"/>
          </OutputClaims>
        </TechnicalProfile>
        <TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
          <Metadata>
            <Item Key="setting.forgotPasswordLinkOverride">ForgotPasswordExchange</Item>
            <Item Key="setting.enableRememberMe">True</Item>
          </Metadata>
        </TechnicalProfile>
        <TechnicalProfile Id="LocalAccountWritePasswordUsingObjectId">
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>

并且,ClaimsProvider 在用户旅程中被调用,如下所示:


  <UserJourneys>
    <UserJourney Id="SignUpOrSignIn">
      <OrchestrationSteps>
        <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
          <ClaimsProviderSelections>
            <ClaimsProviderSelection TargetClaimsExchangeId="FacebookExchange" />
            <ClaimsProviderSelection TargetClaimsExchangeId="GoogleExchange" />
            <ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
            <ClaimsProviderSelection TargetClaimsExchangeId="ForgotPasswordExchange" />
          </ClaimsProviderSelections>
          <ClaimsExchanges>
            <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" />
          </ClaimsExchanges>
        </OrchestrationStep>

我如何从这个用户旅程中分支出来,以通过自定义按钮选择(是或否)收集用户选择“保持登录”的值?

我浏览了社区中的大量示例,但似乎找不到任何此类交互的示例。

azure-ad-b2c azure-ad-b2c-custom-policy
1个回答
0
投票

设置复选框样式

使其成为单选按钮的唯一真正方法是使用自定义 UI 模板,并让 CSS 隐藏原始复选框并使用 JavaScript 注入是/否单选框,以在用户单击以下任一选项时选中/取消选中隐藏的复选框单选按钮。

本机不支持更改策略内的 KMSI 元素类型。


用户的 KMSI 响应

要捕获用户的响应(无论用户选择加入还是退出 KMSI),您可以向登录技术配置文件添加输出声明。

您需要创建一个声明来持有该价值:

<ClaimType Id="UserKmsiChoice">
  <DisplayName>Indicates whether the user selects the me signed-in option</DisplayName>
  <DataType>string</DataType>
  <UserInputType>Readonly</UserInputType>
</ClaimType>

更新

SelfAsserted-LocalAccountSignin-Email
的输出声明以填充新声明:

<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
  <Metadata>
    <Item Key="setting.forgotPasswordLinkOverride">ForgotPasswordExchange</Item>
    <Item Key="setting.enableRememberMe">True</Item>
  </Metadata>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="UserKmsiChoice" AlwaysUseDefaultValue="true" DefaultValue="{Context:KMSI}" />
  </OutputClaims>     
</TechnicalProfile>

此声明可以正常用于您的其余用户旅程。

© www.soinside.com 2019 - 2024. All rights reserved.