with tutorial password net español asp and asp.net asp.net-mvc validation asp.net-identity

asp.net - tutorial - introduction to identity on asp net core



Correo electrónico de identidad con guión en Asp.Net Identity (2)

Estoy usando la identidad MVC de ASP.NET y cuando agrego un correo electrónico del formulario [email protected], aparece el mensaje de error de validación

El nombre de usuario [email protected] no es válido, solo puede contener letras o dígitos.

¿Cómo puedo cambiar la validación para que permita la aceptación del correo electrónico?

Mi cshtml es:

@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> }

Este es mi controlador:

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


El UserValidator predeterminado que se usa en el UserManager tiene una propiedad AllowOnlyAlphanumericUserNames que se establece en verdadero ... tendrá que anular esto para permitir los caracteres especiales. Una posible solución sería anular el UserManager con su propia implementación como tal.

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. }


Gracias por la ayuda en esto.

En realidad resolví esto poniendo lo siguiente en el controlador de cuenta

public AccountController(UserManager<ApplicationUser> userManager) { var provider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider("One"); userManager.UserTokenProvider = new Microsoft.AspNet.Identity.Owin.DataProtectorTokenProvider<ApplicationUser>(provider.Create("EmailConfirmation")); UserManager = userManager; UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager) { AllowOnlyAlphanumericUserNames = false }; }