mirror of https://github.com/abpframework/abp.git
29 changed files with 112 additions and 1 deletions
@ -0,0 +1,48 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.AspNetCore.Identity; |
||||
|
using Microsoft.Extensions.Localization; |
||||
|
using Volo.Abp.Identity.Localization; |
||||
|
|
||||
|
namespace Volo.Abp.Identity |
||||
|
{ |
||||
|
public class AbpIdentityUserValidator : IUserValidator<IdentityUser> |
||||
|
{ |
||||
|
protected IStringLocalizer<IdentityResource> Localizer { get; } |
||||
|
|
||||
|
public AbpIdentityUserValidator(IStringLocalizer<IdentityResource> localizer) |
||||
|
{ |
||||
|
Localizer = localizer; |
||||
|
} |
||||
|
|
||||
|
public virtual async Task<IdentityResult> ValidateAsync(UserManager<IdentityUser> manager, IdentityUser user) |
||||
|
{ |
||||
|
var describer = new IdentityErrorDescriber(); |
||||
|
|
||||
|
Check.NotNull(manager, nameof(manager)); |
||||
|
Check.NotNull(user, nameof(user)); |
||||
|
|
||||
|
var errors = new List<IdentityError>(); |
||||
|
|
||||
|
var userName = await manager.GetUserNameAsync(user); |
||||
|
if (userName == null) |
||||
|
{ |
||||
|
errors.Add(describer.InvalidUserName(null)); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
var owner = await manager.FindByEmailAsync(userName); |
||||
|
if (owner != null && !string.Equals(await manager.GetUserIdAsync(owner), await manager.GetUserIdAsync(user))) |
||||
|
{ |
||||
|
errors.Add(new IdentityError |
||||
|
{ |
||||
|
Code = "InvalidUserName", |
||||
|
Description = Localizer["Volo.Abp.Identity:YouCanNotUseAnotherUsersEmailAsYourUsername", userName] |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return errors.Count > 0 ? IdentityResult.Failed(errors.ToArray()) : IdentityResult.Success; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,36 @@ |
|||||
|
using System; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.Extensions.Localization; |
||||
|
using Shouldly; |
||||
|
using Volo.Abp.Identity.Localization; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace Volo.Abp.Identity.AspNetCore; |
||||
|
|
||||
|
public class AbpIdentityUserValidator_Tests : AbpIdentityAspNetCoreTestBase |
||||
|
{ |
||||
|
private readonly IdentityUserManager _identityUserManager; |
||||
|
private readonly IStringLocalizer<IdentityResource> Localizer; |
||||
|
|
||||
|
public AbpIdentityUserValidator_Tests() |
||||
|
{ |
||||
|
_identityUserManager = GetRequiredService<IdentityUserManager>(); |
||||
|
Localizer = GetRequiredService<IStringLocalizer<IdentityResource>>(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Test() |
||||
|
{ |
||||
|
var user1 = new IdentityUser(Guid.NewGuid(), "user1", "user1@volosoft.com"); |
||||
|
var identityResult = await _identityUserManager.CreateAsync(user1); |
||||
|
identityResult.Succeeded.ShouldBeTrue(); |
||||
|
|
||||
|
var user2 = new IdentityUser(Guid.NewGuid(), "user1@volosoft.com", "user2@volosoft.com"); |
||||
|
identityResult = await _identityUserManager.CreateAsync(user2); |
||||
|
identityResult.Succeeded.ShouldBeFalse(); |
||||
|
identityResult.Errors.Count().ShouldBe(1); |
||||
|
identityResult.Errors.First().Code.ShouldBe("InvalidUserName"); |
||||
|
identityResult.Errors.First().Description.ShouldBe(Localizer["Volo.Abp.Identity:YouCanNotUseAnotherUsersEmailAsYourUsername", "user1@volosoft.com"]); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue