tutorial net mvc framework example asp c# asp.net asp.net-mvc asp.net-web-api asp.net-identity

c# - net - token web api



ASP.NET MVC Identity Email/Nombre de usuario con caracteres especiales (2)

Está configurando AllowOnlyAlphanumericUserNames = false en el método Create de ApplicationUserManager . Dentro de la acción PostRegister de su ApiController , está actualizando una instancia de ApplicationUserManager . AllowOnlyAlphanumericUserNames es verdadero por defecto.

Puede cambiar el Constructor de ApplicationUserManager

public ApplicationUserManager(IUserStore<ApplicationUser> store): base(store) { UserValidator = new UserValidator<ApplicationUser>(this) { AllowOnlyAlphanumericUserNames = false, RequireUniqueEmail = true }; }

De esta forma, AllowOnlyAlphanumericUserNames se configura como falso cuando se AllowOnlyAlphanumericUserNames una instancia de ApplicationUserManger .

Nota: Es mejor obtener el ApplicationUserManager de OwinContext igual que en AccountController de la plantilla MVC5 predeterminada o usar Dependency Injection.

Al registrar una cuenta a través de la API web con un correo electrónico como "[email protected]", Fiddler devuelve el siguiente error. Tenga en cuenta que el correo electrónico también se utiliza como nombre de usuario, por lo que ambos campos son iguales . Pero funciona al registrarse en MVC.

ExceptionMessage = Error al crear el usuario - Excepción de identidad. Los errores fueron:

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

Objeto de usuario

var newUser = new ApplicationUser { UserName = user.Email, Email = user.Email };

IdentifyConfig.cs

public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) { var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>())); // Configure validation logic for usernames manager.UserValidator = new UserValidator<ApplicationUser>(manager) { RequireUniqueEmail = true, AllowOnlyAlphanumericUserNames = false };

Intenté comentar AllowOnlyAlphanumericUserNames pero no funcionó. Al configurarlo correctamente en falso debería permitir caracteres especiales, en mi caso un guión (-).

Controlador API

// POST: api/auth/register [ActionName("Register")] public async Task<HttpResponseMessage> PostRegister(Auth user) { //dash issue is here. var userContext = new ApplicationDbContext(); var userStore = new UserStore<ApplicationUser>(userContext); var userManager = new UserManager<ApplicationUser>(userStore); var newUser = new ApplicationUser { UserName = user.Email, Email = user.Email }; var result = await userManager.CreateAsync(newUser, user.PasswordHash); if (result.Succeeded) { ...

Solución

NO hay cambios en IdentityConfig.cs . Solo cambios a mi controlador API.

// POST: api/auth/register [ActionName("Register")] public async Task<HttpResponseMessage> PostRegister(Auth user) { //Changed to the following line ApplicationUserManager userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>(); var newUser = new ApplicationUser { UserName = user.Email, Email = user.Email }; var result = await userManager.CreateAsync(newUser, user.PasswordHash);


Esto se debe a que toda su configuración está en ApplicationUserManager , que no está utilizando en su acción Web Api. En cambio, estás actualizando UserManager , que usará los valores predeterminados para toda la validación y demás.