首页 > 解决方案 > 如何在 ASP.Net Core 中为唯一的电子邮件地址添加 IdentityUser IdentityResult 错误

问题描述

我的“用户”类继承自“身份用户”,我想让 EmailAddress 独一无二。但不是像这样创建一个独特的属性

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

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

如果在“result.errors”中使用/使用了用户名和 IdentityErrors 的 IEnumerable,则“result.Succeeded”为假的我的注册方法。我想从重复的电子邮件中得到相同类型的错误。这可能吗?

[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);
}

标签: c#asp.net-coreasp.net-core-identity

解决方案


这已经被支持,使用RequireUniqueEmail默认为false. 这是一个如何将其设置为 的示例true,取自文档并进行了相应修改:

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

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

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

推荐阅读