Вы можете построить преобразования утверждений, чтобы определить, активирована ли учетная запись пользователя, и, если нет, отобразить сообщение об ошибке.
Во-первых, вы должны объявить тип утверждения, который показывает, активирована ли учетная запись пользователя:
<ClaimType Id="accountActivated">
<DisplayName>Account Activated</DisplayName>
<DataType>boolean</DataType>
</ClaimType>
Далее необходимо объявить a CompareClaimToValue преобразование утверждений , чтобы определить, установлено ли для пользовательского атрибута значение «Активно»:
<ClaimsTransformation Id="CheckAccountActivated" TransformationMethod="CompareClaimToValue">
<InputClaims>
<InputClaim ClaimTypeReferenceId="extension_AccountStatus" TransformationClaimType="inputClaim1" />
</InputClaims>
<InputParameters>
<InputParameter Id="compareTo" DataType="string" Value="Active" />
<InputParameter Id="operator" DataType="string" Value="equal" />
<InputParameter Id="ignoreCase" DataType="string" Value="true" />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="accountActivated" TransformationClaimType="outputClaim" />
</OutputClaims>
</ClaimsTransformation>
Далее вы должны объявить AssertBooleanClaimIsEqualToValue преобразование утверждений , чтобы убедиться, что учетная запись пользователя активирована:
<ClaimsTransformation Id="EnsureAccountActivated" TransformationMethod="AssertBooleanClaimIsEqualToValue">
<InputClaims>
<InputClaim ClaimTypeReferenceId="accountActivated" TransformationClaimType="inputClaim" />
</InputClaims>
<InputParameters>
<InputParameter Id="valueToCompareTo" DataType="boolean" Value="true" />
</InputParameters>
</ClaimsTransformation>
Далее вы должны вызвать EnsureAccountAcactive требует преобразований из копии AAD-UserReadUsingObjectId теста технического профиля, что учетная запись пользователя активирована:
<TechnicalProfile Id="AAD-UserReadUsingObjectId-EnsureAccountActivated">
<OutputClaimsTransformations>
<OutputClaimsTransformation ReferenceId="CheckAccountActivated" />
<OutputClaimsTransformation ReferenceId="EnsureAccountActivated" />
</OutputClaimsTransformations>
<IncludeTechnicalProfile ReferenceId="AAD-UserReadUsingObjectId" />
</TechnicalProfile>
Наконец, вы должны вызвать AAD-UserReadUsingObjectId-EnsureAccountActivation технический профиль из копии SelfAsserted-LocalAccountSignin-Email technПрофиль, отображающий сообщение об ошибке:
<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email-EnsureAccountActivated">
...
<Metadata>
...
<Item Key="UserMessageIfClaimsTransformationBooleanValueIsNotEqual">Whoops, your e-mail address hasn't been verified, contact Support.</Item>
</Metadata>
<ValidationTechnicalProfiles>
<ValidationTechnicalProfile ReferenceId="login-NonInteractive" />
<ValidationTechnicalProfile ReferenceId="AAD-UserReadUsingObjectId-EnsureAccountActivated" />
</ValidationTechnicalProfiles>
...
</TechnicalProfile>
ОБНОВЛЕНИЕ: 3 апреля 2019 г.
Это сработало абсолютно нормально, но нужна некоторая помощь в локализации пользовательской ошибки.сообщение.
Вы можете настроить сообщение об ошибке, используя localization .
Первый шаг - включить локализацию для английского и любого другогоподдерживаемые языки:
<BuildingBlocks>
...
<ContentDefinitions />
<Localization>
<SupportedLanguages DefaultLanguage="en">
<SupportedLanguage>en</SupportedLanguage>
<SupportedLanguage>es</SupportedLanguage>
</SupportedLanguages>
</Localization>
</BuildingBlocks>
Второй шаг - определить локализованные строки для каждого поддерживаемого языка для определения страницы, связанной с SelfAsserted-LocalAccountSignin-Email-EnsureAccountActivation технический профиль:
<BuildingBlocks>
...
<Localization>
<SupportedLanguages />
<LocalizedResources Id="api.signuporsignin.en">
<LocalizedStrings>
<LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfClaimsTransformationBooleanValueIsNotEqual">Whoops, your e-mail address hasn't been verified, contact Support.</LocalizedString>
</LocalizedStrings>
</LocalizedResources>
<LocalizedResources Id="api.signuporsignin.es">
<LocalizedStrings>
<LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfClaimsTransformationBooleanValueIsNotEqual">Vaya, su dirección de correo electrónico no ha sido verificada, contacte a Soporte.</LocalizedString>
</LocalizedStrings>
</LocalizedResources>
</Localization>
</BuildingBlocks>
(я не говорю по-испански, поэтому извиняюсь за неправильный перевод.)
Последний шаг - объявление ссылок от определения страницы до локализованных ресурсов:
<BuildingBlocks>
...
<ContentDefinitions>
<ContentDefinition Id="api.signuporsignin">
...
<LocalizedResourcesReferences MergeBehavior="Prepend">
<LocalizedResourcesReference Language="en" LocalizedResourcesReferenceId="api.signuporsignin.en" />
<LocalizedResourcesReference Language="es" LocalizedResourcesReferenceId="api.signuporsignin.es" />
</LocalizedResourcesReferences>
</ContentDefinition>
</ContentDefinitions>
<Localization />
</BuildingBlocks>