防止身份警报被触发
Prevent identity alerts from being fired
我正在做一个项目,我决定将电子邮件实现为用户名并完全删除默认的 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)
{ ...
但是,由于此更改,每当我遇到用户输入已存在的电子邮件的情况时,身份就会触发用户名和电子邮件已经存在。
如何防止在这种情况下触发 "Name is already taken" 警报?我试图从 "new ApplicationUser" 调用中删除用户名参数,但随后它向我发出警告,提示它也不能为 null。谢谢!
这一行 AddErrors(result);
导致了问题。
您可以更改方法以忽略以 "Name"
开头的错误
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" });
我正在做一个项目,我决定将电子邮件实现为用户名并完全删除默认的 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)
{ ...
但是,由于此更改,每当我遇到用户输入已存在的电子邮件的情况时,身份就会触发用户名和电子邮件已经存在。
如何防止在这种情况下触发 "Name is already taken" 警报?我试图从 "new ApplicationUser" 调用中删除用户名参数,但随后它向我发出警告,提示它也不能为 null。谢谢!
这一行 AddErrors(result);
导致了问题。
您可以更改方法以忽略以 "Name"
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" });