将来自 Facebook 的电子邮件作为输入声明传递给自我断言的个人资料时,电子邮件验证框会消失

Email verification box disappears when passing email from Facebook as input claim to self-asserted profile

我们想要强制用户提供并验证他们的电子邮件地址,即使他们拒绝通过 Facebook 的电子邮件声明。

我们创建了一个编排步骤,在从 Facebook 返回后调用以下技术配置文件:

        <TechnicalProfile Id="SelfAsserted-ConfirmEmailSocial">
          <DisplayName>Confirm email social</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>
          <InputClaims>
            <InputClaim ClaimTypeReferenceId="email" />
          </InputClaims>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="Verified.Email" Required="true" />
          </OutputClaims>
        </TechnicalProfile>

如果用户拒绝 facebook 设置,代码将按预期工作:显示验证控件。 但是,如果用户接受 facebook 设置,输入字段和验证控件都会消失。 (并且电子邮件会被预先填充)

(有人在这里解释了堆栈溢出,控件太笨以至于无法意识到您想要验证输入声明 )但是我们无法使建议的解决方案起作用。

我们如何强制验证在之前的编排步骤中提供的电子邮件?

更新: 看来我们可以通过以某种方式将输入声明设置为只读来创建解决方法。 (但前提是它是空的)。

是的,唯一的选择是将其设置为只读,否则我们假设传入的电子邮件已经过验证,这是通过 Facebook 验证的。如果更改电子邮件,则必须对其进行验证。您可以修改 JavaScript/css 以显示控件。或者在自定义策略中,使用输入声明转换将电子邮件声明复制到新的只读声明 ID 中。然后使用输入声明预填充表单。然后使用输出声明显示声明。