From 299512d391f5dfe6772a707d572b6555d861a028 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 13 Feb 2025 11:47:49 +0800 Subject: [PATCH] Add custom IdentityErrorDescriber for localized error messages. --- .../Abp/Identity/AbpIdentityErrorDescriber.cs | 33 +++++++++++++++++++ .../AbpIdentityUserValidator_Tests.cs | 11 +++++++ 2 files changed, 44 insertions(+) create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityErrorDescriber.cs diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityErrorDescriber.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityErrorDescriber.cs new file mode 100644 index 0000000000..3dea11faea --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityErrorDescriber.cs @@ -0,0 +1,33 @@ +using JetBrains.Annotations; +using Microsoft.AspNetCore.Identity; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Localization; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Identity.Localization; +using Volo.Abp.Localization; + +namespace Volo.Abp.Identity; + +[Dependency(ServiceLifetime.Scoped, ReplaceServices = true)] +[ExposeServices(typeof(IdentityErrorDescriber))] +public class AbpIdentityErrorDescriber : IdentityErrorDescriber +{ + protected IStringLocalizer Localizer { get; } + + public AbpIdentityErrorDescriber(IStringLocalizer localizer) + { + Localizer = localizer; + } + + public override IdentityError InvalidUserName([CanBeNull] string userName) + { + using (CultureHelper.Use("en")) + { + return new IdentityError + { + Code = nameof(InvalidUserName), + Description = Localizer["Volo.Abp.Identity:InvalidUserName", userName ?? ""] + }; + } + } +} diff --git a/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/AbpIdentityUserValidator_Tests.cs b/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/AbpIdentityUserValidator_Tests.cs index 6af6b4ff57..6b656fbec4 100644 --- a/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/AbpIdentityUserValidator_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/AbpIdentityUserValidator_Tests.cs @@ -19,6 +19,17 @@ public class AbpIdentityUserValidator_Tests : AbpIdentityAspNetCoreTestBase Localizer = GetRequiredService>(); } + [Fact] + public async Task InvalidUserName_Messages_Test() + { + var user = new IdentityUser(Guid.NewGuid(), "abp 123", "user@volosoft.com"); + var identityResult = await _identityUserManager.CreateAsync(user); + identityResult.Succeeded.ShouldBeFalse(); + identityResult.Errors.Count().ShouldBe(1); + identityResult.Errors.First().Code.ShouldBe("InvalidUserName"); + identityResult.Errors.First().Description.ShouldBe(Localizer["Volo.Abp.Identity:InvalidUserName", "abp 123"]); + } + [Fact] public async Task Can_Not_Use_Another_Users_Email_As_Your_Username_Test() {