如何在 ASP.Net Core 中为唯一电子邮件地址添加 IdentityUser IdentityResult 错误

How to add a IdentityUser IdentityResult error in ASP.Net Core for a unique email address

我的 "User" class 继承自 "IdentityUser",我想让 EmailAddress 唯一。但不是像这样创建一个独特的 属性

builder.Entity<User>()
  .HasIndex(u => u.Email).IsUnique();

在模型构建器中,当我尝试在下面的方法中注册一个重复的电子邮件地址时抛出异常,我希望它 return 一个 IdentityResult 错误,就像我有一个重复的用户名。有些身份如何忘记包含电子邮件字段的唯一性!?

我的注册方法,如果用户名是 taken/used 并且在 "result.errors" 中是 IdentityErrors 的 IEnumerable,则 "result.Succeeded" 为 false。我想从重复的电子邮件中得到相同类型的错误。这可能吗?

[HttpPost("register")]
public async Task<IActionResult> Register(UserForRegisterDto userForRegisterDto)
{
    var userToCreate = _mapper.Map<User>(userForRegisterDto);

    var result = await _userManager.CreateAsync(userToCreate, userForRegisterDto.Password);

    var userToReturn = _mapper.Map<UserForDetailedDto>(userToCreate);

    if (result.Succeeded)
    {
        return CreatedAtRoute("GetUser", new { controller = "Users", id = userToCreate.Id }, userToReturn);
    }

    return BadRequest(result.Errors);
}

这已经被支持,使用 RequireUniqueEmail, which defaults to false. Here’s an example of how to set it to true, taken from the docs 并相应修改:

services.Configure<IdentityOptions>(options =>
{
    options.User.RequireUniqueEmail = true;
});

您可以通过调用 AddIdentity(或您正在使用的任何变体)来实现相同的目的。这是该方法的一个示例:

services.AddIdentity<User, Role>(options =>
{
    options.User.RequireUniqueEmail = true;
})