登录时接受用户名或电子邮件

时间:2018-01-08 13:54:40

标签: azure-ad-b2c identity-experience-framework

我要求用户使用他们在注册时创建的电子邮件或用户名登录。

以下代码段是我的用户旅程步骤,它引用了基础技术配置文件。引用的ContentDefinition正在使用unifiedssp:1.1.0数据模型。

<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
      <ClaimsProviderSelections>
        <ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
      </ClaimsProviderSelections>
      <ClaimsExchanges>
        <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SA-LocalAccount-SignIn" />
      </ClaimsExchanges>
    </OrchestrationStep>

引用的技术配置文件,对登录标识符和密码执行验证检查:

  <TechnicalProfile Id="SA-LocalAccount-SignIn">
            <DisplayName>Local Account Sign In</DisplayName>
            <Protocol Name="Proprietary" 
  Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
          <Metadata>
            <Item Key="SignUpTarget">LocalAccountSignUp</Item>
            <Item Key="setting.operatingMode">Username</Item>
            <Item Key="ContentDefinitionReferenceId">api.localaccountsignin</Item>
          </Metadata>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="signInName" Required="true" />
            <OutputClaim ClaimTypeReferenceId="password" Required="true" />
            <OutputClaim ClaimTypeReferenceId="objectId" Required="true" />
          </OutputClaims>
          <ValidationTechnicalProfiles>
            <ValidationTechnicalProfile ReferenceId="LoginToAzureAD-OIDC" />
          </ValidationTechnicalProfiles>
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
        </TechnicalProfile>

我知道setting.operatingMode定义所需的登录标识符是Username还是Email。是否有第三种选择允许两者兼而有之?

指定一个对登录标识符字段强制使用正则表达式并阻止另一个使用正则表达式,即如果setting.operatingMode设置为Username,则不接受电子邮件地址作为输入。

1 个答案:

答案 0 :(得分:2)

问题原因是我的电子邮件地址中包含的正则表达式模式以及var GetIdres = client.Execute(GetIdreq).Content; dynamic data = JObject.Parse(GetIdres); 中的用户名ClaimType。删除附加到用户名声明的正则表达式会导致电子邮件地址被接受为有效输入,我现在可以使用用户名或电子邮件地址登录。