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

时间:2019-07-13 06:19:52

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

我的“用户”类继承自“ IdentityUser”,我想使EmailAddress唯一。但是不要创建像这样的唯一属性

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

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

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

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

1 个答案:

答案 0 :(得分:1)

使用RequireUniqueEmail(默认为false)已经支持此功能。这是一个如何将其设置为true的示例,该示例取自docs并进行了相应的修改:

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

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

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