当使用ASP.Net Core Identity作为身份验证和授权框架时,创建重复用户的问题可能会出现。为了避免这个问题,我们可以添加自定义验证来确保用户唯一性。
下面是一个示例代码,使用自定义验证来确保邮箱地址唯一性:
public class UniqueEmailValidator : IValidator
{
private readonly UserManager _userManager;
public UniqueEmailValidator(UserManager userManager)
{
_userManager = userManager;
}
public async Task ValidateAsync(AppUser user, CancellationToken cancel)
{
var existingUser = await _userManager.FindByEmailAsync(user.Email);
if (existingUser != null && existingUser.Id != user.Id)
{
return new ValidationResult("邮箱地址已经被注册.");
}
return ValidationResult.Success;
}
}
在上面的代码中,我们使用了 IUserValidator
接下来,我们需要把这个验证程序添加到应用程序的配置中。在 Startup.cs 中添加以下代码:
services.AddTransient, UniqueEmailValidator>();
现在,我们已经添加了为了验证唯一性而编写的自定义类,并且将其添加到了服务集合中供我们的应用程序使用。现在只需等待用户尝试使用重复的邮箱地址进行注册或者更新时,就会出现验证错误。
最后,我们需要将查找到的现有用户与用户ID进行比较,以确保不会因更新而出现验证错误。在上面的代码中,我们检查了现有用户是否不为null,以及ID是否匹配user的ID。如果这些条件都不成立,则说明邮箱地址可用。
通过这种方式,我们可以避免ASP.Net Core Identity重复用户的问题,并确保用户的唯一性。