【问题标题】:Prevent identity alerts from being fired防止身份警报被触发
【发布时间】:2015-07-12 19:27:56
【问题描述】:

我正在从事一个项目,我决定将电子邮件作为用户名实现并完全删除默认的 MVC 用户名字段。我已经设置了这样的身份注册:

型号:

[Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }

控制器设置:

if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            { ...

但是,由于此更改,每当我遇到用户输入已存在的电子邮件的情况时,身份都会触发用户名和电子邮件都已存在。

如何防止在这种情况下触发“姓名已被占用”警报?我试图从“new ApplicationUser”调用中删除用户名参数,但随后它向我发出警告,它也不能为空。谢谢!

【问题讨论】:

  • @AntarrByrd,发布模型

标签: asp.net asp.net-mvc asp.net-identity


【解决方案1】:

这条线AddErrors(result); 引起了问题。 您可以更改方法以忽略以“名称”开头的错误

private void AddErrors(IdentityResult result, string[] ignoreStartWith)
{
     foreach (var error in result.Errors)
     {
          if (!ignoreStartWith.Any(s => error.StartsWith(s)))
          {
                ModelState.AddModelError("", error);
          }
     }
}

并像使用它

AddErrors(result, ignoreStartWith:new[] { "Name" });

【讨论】:

  • 正确。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多