Asp.net

Asp.Net Identity 中帶有破折號的身份電子郵件

  • November 4, 2014

我正在使用 ASP.NET MVC 身份,當我添加格式為 test-name@testing.com 的電子郵件時,我收到驗證錯誤消息

使用者名 test-name@testing.com 無效,只能包含字母或數字。

如何更改驗證以允許電子郵件被接受?

我的cshtml是:

@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { role = "form" }))
       {
           @Html.AntiForgeryToken()

           <div class="reg-header">
               <h2>Register</h2>
           </div>
           <fieldset>
               @if (ViewBag.IsRegister)
               {
                   @Html.ValidationSummary(true, "", new { @class = "text-danger" })
               }
               <div class="margin-bottom-20">
                   @Html.LabelFor(m => m.RegisterViewModel.FirstName)<br />
                   <div class="input-group">
                       <span class="input-group-addon"><i class="fa fa-user"></i></span>
                       @Html.TextBoxFor(m => m.RegisterViewModel.FirstName, new { @class = "form-control" })
                   </div>
                   @Html.ValidationMessageFor(m => m.RegisterViewModel.FirstName, "", new { @class = "text-danger" })
               </div>

               <div class="margin-bottom-20">
                   @Html.LabelFor(m => m.RegisterViewModel.LastName)<br />
                   <div class="input-group">
                       <span class="input-group-addon"><i class="fa fa-user"></i></span>
                       @Html.TextBoxFor(m => m.RegisterViewModel.LastName, new { @class = "form-control" })
                   </div>
                   @Html.ValidationMessageFor(m => m.RegisterViewModel.LastName, "", new { @class = "text-danger" })
               </div>

               <div class="margin-bottom-20">
                   @Html.LabelFor(m => m.RegisterViewModel.Email)<br />
                   <div class="input-group">
                       <span class="input-group-addon"><i class="fa fa-user"></i></span>
                       @Html.TextBoxFor(m => m.RegisterViewModel.Email, new { @class = "form-control" })
                   </div>
                   @Html.ValidationMessageFor(m => m.RegisterViewModel.Email, "", new { @class = "text-danger" })
               </div>

               <div class="margin-bottom-20">
                   @Html.LabelFor(m => m.RegisterViewModel.Password)<br />
                   <div class="input-group ">
                       <span class="input-group-addon"><i class="fa fa-lock"></i></span>
                       @Html.PasswordFor(m => m.RegisterViewModel.Password, new { @class = "form-control" })

                   </div>
                   @Html.ValidationMessageFor(m => m.RegisterViewModel.Password, "", new { @class = "text-danger" })
               </div>

               <div class="margin-bottom-20">
                   @Html.LabelFor(m => m.RegisterViewModel.ConfirmPassword)<br />
                   <div class="input-group">
                       <span class="input-group-addon"><i class="fa fa-lock"></i></span>
                       @Html.PasswordFor(m => m.RegisterViewModel.ConfirmPassword, new { @class = "form-control" })
                       <div class="clear"></div>
                   </div>
                   @Html.ValidationMessageFor(m => m.RegisterViewModel.ConfirmPassword, "", new { @class = "text-danger" })
               </div>
               <div class="row">

                   <div class="col-md-12">
                       <button class="btn-u" type="submit" name="command" value="Register">Register</button>
                   </div>
               </div>
           </fieldset>
       }

這是我的控制器:

               RegisterViewModel model = login.RegisterViewModel;
               var user = new ApplicationUser() { UserName = model.Email, FirstName = model.FirstName, LastName = model.LastName, UserRole = UserRole.Rider };
               IdentityResult result = await UserManager.CreateAsync(user, model.Password);
               if (result.Succeeded)
               {
                   await SignInAsync(user, isPersistent: false);

                   // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                   // Send an email with this link
                   // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                   // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                   // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

                   return RedirectToLocal(returnUrl);
                   //return RedirectToAction("Index", "Home");
               }
               else
               {
                   ViewBag.ReturnUrl = returnUrl;
                   AddErrors(result);
               }

UserValidator中使用的預設值UserManager具有設置為 true 的屬性AllowOnlyAlphanumericUserNames。您需要覆蓋它以允許特殊字元。一個可能的解決方案是像這樣用您自己的實現覆蓋 UserManager。

public class ApplicationUserManager : UserManager<ApplicationUser>
{
   public ApplicationUserManager(IUserStore<ApplicationUser> store) : base(store)
   {
       this.UserValidator = new UserValidator<ApplicationUser>(this) { AllowOnlyAlphanumericUserNames = false };
   }
}

public class ApplicationUser : IdentityUser
{
   //Custom Properties etc.
}

引用自:https://stackoverflow.com/questions/26726750