Skip to content

Commit d335aeb

Browse files
committed
Use custom user validator in Identity module
1 parent 37e5c2e commit d335aeb

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreModule.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public override void ConfigureServices(ServiceConfigurationContext context)
4848

4949
public override void PostConfigureServices(ServiceConfigurationContext context)
5050
{
51+
// Replace the default UserValidator with AbpIdentityUserValidator
5152
context.Services.RemoveAll(x => x.ServiceType == typeof(IUserValidator<IdentityUser>) && x.ImplementationType == typeof(UserValidator<IdentityUser>));
5253
context.Services.AddAbpOptions<SecurityStampValidatorOptions>()
5354
.Configure<IServiceProvider>((securityStampValidatorOptions, serviceProvider) =>

modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityUserValidator.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public AbpIdentityUserValidator(
3535
CurrentTenant = currentTenant;
3636
TenantFilter = tenantFilter;
3737
UserRepository = userRepository;
38-
DefaultUserValidator = new UserValidator<IdentityUser>();
38+
DefaultUserValidator = new UserValidator<IdentityUser>(ErrorDescriber);
3939
}
4040

4141
public virtual async Task<IdentityResult> ValidateAsync(UserManager<IdentityUser> manager, IdentityUser user)
@@ -121,7 +121,7 @@ protected virtual async Task<IdentityResult> ValidateSharedUserAsync(UserManager
121121
if (users.Any())
122122
{
123123
var userNames = users.Select(u => u.UserName).ToList();
124-
errors.Add(userNames.Contains(user.UserName) ? ErrorDescriber.DuplicateUserName(user.UserName!) : ErrorDescriber.DuplicateEmail(user.Email!));
124+
errors.Add(userNames.Contains(user.UserName) ? ErrorDescriber.InvalidUserName(user.UserName!) : ErrorDescriber.InvalidEmail(user.Email!));
125125
}
126126

127127
users = await UserRepository.GetUsersByNormalizedEmailsAsync([normalizedUserName!, normalizedEmail], true);
@@ -133,7 +133,7 @@ protected virtual async Task<IdentityResult> ValidateSharedUserAsync(UserManager
133133
if (users.Any())
134134
{
135135
var emails = users.Select(u => u.Email).ToList();
136-
errors.Add(emails.Contains(user.Email) ? ErrorDescriber.DuplicateEmail(user.Email!) : ErrorDescriber.DuplicateUserName(user.UserName!));
136+
errors.Add(emails.Contains(user.Email) ? ErrorDescriber.InvalidEmail(user.Email!) : ErrorDescriber.InvalidUserName(user.UserName!));
137137
}
138138
}
139139
}
@@ -146,7 +146,7 @@ public virtual async Task<IdentityResult> BuiltInValidateAsync(UserManager<Ident
146146
var errors = await ValidateUserName(manager, user);
147147
if (manager.Options.User.RequireUniqueEmail)
148148
{
149-
errors = await ValidateEmail(manager, user);
149+
errors.AddRange(await ValidateEmail(manager, user));
150150
}
151151
return errors?.Count > 0 ? IdentityResult.Failed(errors.ToArray()) : IdentityResult.Success;
152152
}

modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/AbpIdentityUserValidator_Tests.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
using System;
22
using System.Linq;
33
using System.Threading.Tasks;
4+
using Microsoft.Extensions.DependencyInjection;
5+
using Microsoft.Extensions.Hosting;
46
using Microsoft.Extensions.Localization;
57
using Shouldly;
68
using Volo.Abp.Identity.Localization;
9+
using Volo.Abp.MultiTenancy;
710
using Xunit;
811

912
namespace Volo.Abp.Identity.AspNetCore;
@@ -60,3 +63,15 @@ public async Task Can_Not_Use_Another_Users_Name_As_Your_Email_Test()
6063
identityResult.Errors.First().Description.ShouldBe(Localizer["Volo.Abp.Identity:InvalidEmail", "user1@volosoft.com"]);
6164
}
6265
}
66+
67+
public class SharedTenantUserSharingStrategy_AbpIdentityUserValidator_Tests : AbpIdentityUserValidator_Tests
68+
{
69+
protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
70+
{
71+
services.Configure<AbpMultiTenancyOptions>(options =>
72+
{
73+
options.IsEnabled = true;
74+
options.UserSharingStrategy = TenantUserSharingStrategy.Shared;
75+
});
76+
}
77+
}

0 commit comments

Comments
 (0)