Browse Source

Add `ValidateUserNameAsync` & `GetRandomUserNameAsync` to `IdentityUserManager`.

pull/18612/head
maliming 2 years ago
parent
commit
4d798c24f2
  1. 41
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs
  2. 44
      modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityUserManager_Tests.cs

41
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs

@ -82,7 +82,7 @@ public class IdentityUserManager : UserManager<IdentityUser>, IDomainService
return await CreateAsync(user);
}
public async override Task<IdentityResult> DeleteAsync(IdentityUser user)
{
user.Claims.Clear();
@ -397,4 +397,43 @@ public class IdentityUserManager : UserManager<IdentityUser>, IDomainService
await UserRepository.UpdateOrganizationAsync(sourceOrganizationId, targetOrganizationId, CancellationToken);
}
public virtual async Task<bool> ValidateUserNameAsync(string userName, Guid? userId = null)
{
if (string.IsNullOrWhiteSpace(userName))
{
return false;
}
if (!string.IsNullOrEmpty(Options.User.AllowedUserNameCharacters) && userName.Any(c => !Options.User.AllowedUserNameCharacters.Contains(c)))
{
return false;
}
var owner = await FindByNameAsync(userName);
if (owner != null && owner.Id != userId)
{
return false;
}
return true;
}
public virtual Task<string> GetRandomUserNameAsync(int length)
{
var allowedUserNameCharacters = Options.User.AllowedUserNameCharacters;
if (allowedUserNameCharacters.IsNullOrWhiteSpace())
{
allowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
}
var randomUserName = string.Empty;
var random = new Random();
while (randomUserName.Length < length)
{
randomUserName += allowedUserNameCharacters[random.Next(0, allowedUserNameCharacters.Length)];
}
return Task.FromResult(randomUserName);
}
}

44
modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityUserManager_Tests.cs

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.DependencyInjection;
@ -378,6 +379,49 @@ public class IdentityUserManager_Tests : AbpIdentityDomainTestBase
}
}
[Fact]
public async Task ValidateUserNameAsync()
{
var result = await _identityUserManager.ValidateUserNameAsync("M_y+User-001@abp.io");
result.ShouldBeTrue();
var user = CreateRandomUser();
(await _identityUserManager.CreateAsync(user)).CheckErrors();
result = await _identityUserManager.ValidateUserNameAsync(user.UserName, user.Id);
result.ShouldBeTrue();
result = await _identityUserManager.ValidateUserNameAsync(user.UserName);
result.ShouldBeFalse();
result = await _identityUserManager.ValidateUserNameAsync("无效的字符");
result.ShouldBeFalse();
}
[Fact]
public async Task GetRandomUserNameAsync()
{
_identityUserManager.Options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
var username = await _identityUserManager.GetRandomUserNameAsync(15);
username.Length.ShouldBe(15);
username.All(c => _identityUserManager.Options.User.AllowedUserNameCharacters.Contains(c)).ShouldBeTrue();
_identityUserManager.Options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyz0123456789";
username = await _identityUserManager.GetRandomUserNameAsync(15);
username.Length.ShouldBe(15);
username.All(c => _identityUserManager.Options.User.AllowedUserNameCharacters.Contains(c)).ShouldBeTrue();
_identityUserManager.Options.User.AllowedUserNameCharacters = "0123456789";
username = await _identityUserManager.GetRandomUserNameAsync(15);
username.Length.ShouldBe(15);
username.All(c => _identityUserManager.Options.User.AllowedUserNameCharacters.Contains(c)).ShouldBeTrue();
_identityUserManager.Options.User.AllowedUserNameCharacters = null!;
username = await _identityUserManager.GetRandomUserNameAsync(15);
username.Length.ShouldBe(15);
username.All(c => "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+".Contains(c)).ShouldBeTrue();
}
private async Task CreateRandomDefaultRoleAsync()
{
await _identityRoleRepository.InsertAsync(

Loading…
Cancel
Save