Сначала позвольте мне объяснить проблему
Причина в том, что библиотека Identity внедряет валидированный пользовательский класс, который использует библиотеку по умолчанию, которая является UserValidator.
Решение состоит только в том, чтобы внедритьCustomUserValidator.Случается так, что, если он внедряется в обычную реализацию, он добавляет 2 UserValidator, первый из которых является библиотекой идентификаторов по умолчанию, а второй - тот, который вы реализовали CustomUserIdentity.
Затем, чтобы внедрить только CustomUserIdentity, вы должны создать новый CustomUserManager, чтобы иметь возможность внедрять новый ICustomUserValidator, чтобы он не использовал тот, который по умолчанию является IUserValidator.
Это мое решение:
Это интерфейс ICustomUserValidator
public interface ICustomUserValidator<TUser> : IUserValidator<TUser> where TUser : ApplicationUser
{
}
И реализация класса
public class CustomUserValidator<TUser> : UserValidator<TUser>, ICustomUserValidator<TUser>
where TUser : ApplicationUser
{
public async Task<IdentityResult> ValidateAsync(UserManager<TUser> manager, TUser user)
{
//Some Code
}
private async Task ValidateUserName(UserManager<TUser> manager, TUser user, ICollection<IdentityError> errors)
{
//Some Code
}
}
И этот для CustomUserManager
public class CustomUserManager<TUser> : UserManager<TUser>
where TUser : ApplicationUser
{
public CustomUserManager(IUserStore<TUser> store, IOptions<IdentityOptions> optionsAccessor,
IPasswordHasher<TUser> passwordHasher, IEnumerable<ICustomUserValidator<TUser>> userValidators,
IEnumerable<IPasswordValidator<TUser>> passwordValidators, ILookupNormalizer keyNormalizer,
IdentityErrorDescriber errors, IServiceProvider tokenProviders,
ILogger<UserManager<TUser>> logger)
: base(
store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors,
tokenProviders, logger)
{
}
}
Обратите внимание, что вместоIUserValidator, я поставил ICustomUserValidator
В классе запуска вы должны добавить новый класс:
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddUserManager<CustomUserManager<ApplicationUser>>()
И, наконец, внедрить этот класс
services.AddTransient<ICustomUserValidator<ApplicationUser>, CustomUserValidator<ApplicationUser>>();
Я надеюсь, что эта реализация поможет вам.