2

我正在使用自定义策略。

所需的用户旅程是:

  1. 用户在屏幕 1 上输入电子邮件/密码。
  2. 成功验证屏幕 1 后,用户将被发送到屏幕 2。在屏幕 2 中,用户必须输入发送到其电子邮件的代码。(注意用户在注册时已经验证了邮箱)

我坚持让 2 工作。当前策略如下所示: 步骤 1 输出电子邮件声明。

第 2 步将电子邮件声明作为输入。

在第 2 步中,将显示一个预填充电子邮件的可编辑文本框。不要求任何代码。但是,如果电子邮件被编辑,则要求输入代码。

<TechnicalProfile Id="VerifyEmailAddress">
  <DisplayName>Local Account Signin</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="ContentDefinitionReferenceId">api.selfasserted</Item>
  </Metadata>
  <IncludeInSso>false</IncludeInSso>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="signInName" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="Verified.Email" Required="true"/>
    <OutputClaim ClaimTypeReferenceId="objectId" />
    <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
    <OutputClaim ClaimTypeReferenceId="authenticationSource" />
  </OutputClaims>
  <ValidationTechnicalProfiles>
    <ValidationTechnicalProfile ReferenceId="AAD-UserReadUsingEmailAddress" />
  </ValidationTechnicalProfiles>
</TechnicalProfile>   
4

1 回答 1

3

是的,这给我带来了很多麻烦,

我基本上使用声明转换来做到这一点

<InputClaimsTransformations>
   <InputClaimsTransformation ReferenceId="CopyClaimToreadOnly" />
</InputClaimsTransformations>
<InputClaims>
 <InputClaim ClaimTypeReferenceId="myAlreadyPopulatedClaim" />
 <InputClaim ClaimTypeReferenceId="myAlreadyPopulatedClaim-Readonly" />
</InputClaims>
<OutputClaims>
   <OutputClaim ClaimTypeReferenceId="myAlreadyPopulatedClaim-Readonly" 
PartnerClaimType="Verified.Email" />
 </OutputClaims>

控件不够聪明,无法意识到您填写了声明并且您仍想进行验证,它希望在同一页面上执行电子邮件输入和验证,当您拆分它时,您必须进行此声明复制

希望这可以帮助

于 2017-06-08T07:38:37.033 回答