Azure B2C登录页无需+1国家码适配问题求助
解决方案
1. 添加声明转换逻辑
需要先区分输入的是邮箱还是纯数字手机号,仅对手机号自动追加+1国家码,添加以下声明转换:
1.1 判断输入是否为纯数字手机号
该转换检测signInName是否为10位纯数字,生成布尔类型声明IsPhoneNumber:
<ClaimsTransformation Id="IsSignInNamePhoneNumber" TransformationMethod="StringMatchesRegex"> <InputClaims> <InputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="inputClaim" /> </InputClaims> <InputParameters> <InputParameter Id="regex" DataType="string" Value="^\d{10}$" /> <InputParameter Id="ignoreCase" DataType="boolean" Value="false" /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="IsPhoneNumber" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation>
1.2 条件追加国家码
通过ChooseClaimsTransformation根据IsPhoneNumber的值执行不同逻辑:手机号追加+1,邮箱直接复用原输入:
<ClaimsTransformation Id="AddCountryCodeConditionally" TransformationMethod="ChooseClaimsTransformation"> <InputClaims> <InputClaim ClaimTypeReferenceId="IsPhoneNumber" TransformationClaimType="inputClaim" /> </InputClaims> <InputParameters> <InputParameter Id="trueClaimsTransformationId" DataType="string" Value="AddCountryCodeToPhone" /> <InputParameter Id="falseClaimsTransformationId" DataType="string" Value="CopySignInNameAsIs" /> </InputParameters> </ClaimsTransformation> <!-- 给手机号添加+1前缀 --> <ClaimsTransformation Id="AddCountryCodeToPhone" TransformationMethod="FormatStringClaim"> <InputClaims> <InputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="inputClaim" /> </InputClaims> <InputParameters> <InputParameter Id="stringFormat" DataType="string" Value="+1{0}" /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation> <!-- 直接复制原输入(针对邮箱) --> <ClaimsTransformation Id="CopySignInNameAsIs" TransformationMethod="CopyClaim"> <InputClaims> <InputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="inputClaim" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation>
2. 更新登录技术配置
替换原SelfAsserted-LocalAccountSignin-Email中的输入转换逻辑:
<!-- Main Sign in --> <TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email"> <Metadata> <Item Key="EnforceEmailVerification">False</Item> <Item Key="setting.showSignupLink">false</Item> <Item Key="setting.enableRememberMe">True</Item> <Item Key="setting.forgotPasswordLinkOverride">ForgotPasswordExchange</Item> </Metadata> <InputClaimsTransformations> <InputClaimsTransformation ReferenceId="IsSignInNamePhoneNumber" /> <InputClaimsTransformation ReferenceId="AddCountryCodeConditionally" /> </InputClaimsTransformations> <OutputClaims> <OutputClaim ClaimTypeReferenceId="extension_lastLogon" /> </OutputClaims> <ValidationTechnicalProfiles> <ValidationTechnicalProfile ReferenceId="Get-additional-claims" ContinueOnError="false" /> <!-- Initiate a normal logon against Azure AD B2C --> <ValidationTechnicalProfile ReferenceId="login-NonInteractive" /> </ValidationTechnicalProfiles> <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" /> </TechnicalProfile>
3. 补充声明类型
在<ClaimsSchema>中添加IsPhoneNumber声明:
<ClaimType Id="IsPhoneNumber"> <DisplayName>Is Phone Number</DisplayName> <DataType>boolean</DataType> </ClaimType>
逻辑说明
- 用户输入10位纯数字时,自动触发前缀添加逻辑,生成
+1xxxxxxxxxx格式的手机号用于登录 - 用户输入邮箱时,直接保留原输入内容,不做任何修改
- 同时兼容两种登录方式,满足美国本土用户的使用习惯
内容的提问来源于stack exchange,提问作者Bnd10706
相关产品推荐
相关产品推荐

