Estoy en el proceso de crear una nueva aplicación y comencé a usar EF6-rc1, Microsoft.AspNet.Identity.Core 1.0.0-rc1, Microsoft.AspNet.Identity.EntityFramework 1.0.0-rc1, Microsoft.AspNet.Identity .Owin 1.0.0-rc1, etc. y con las versiones de RTM de ayer, las actualicé a través de NuGet esta noche a RTM.
Aparte de un par de cambios en el código del trabajo que había hecho hasta ahora, todo parecía ir bien, hasta que intenté crear una cuenta de usuario local para la aplicación.
Había estado trabajando en que las direcciones de correo electrónico fueran el formato de nombre de usuario que con el candidato de lanzamiento funcionó muy bien, pero ahora, al crear un usuario con una dirección de correo electrónico para un nombre de usuario, arroja el siguiente error de validación:
El nombre de usuario [email protected] no es válido, solo puede contener letras o dígitos.
Pasé la última hora más o menos buscando una solución o documentación sobre las opciones de configuración, pero fue en vano.
¿Hay alguna forma de configurarlo para permitir direcciones de correo electrónico para nombres de usuario?
fuente
((UserValidator<ApplicationUser>) UserManager.UserValidator).AllowOnlyAlphanumericUserNames = false;
Respuestas:
Puede permitir esto conectando su propio UserValidator en el UserManager, o simplemente desactivándolo en la implementación predeterminada:
fuente
public AccountController(UserManager<ApplicationUser> userManager)
constructor agregueUserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager) { AllowOnlyAlphanumericUserNames = false };
La versión C # de esto (en App_Code \ IdentityModels.cs) es
fuente
En mi caso, ejecutándome en VS 2013 C #, MVC 5.2.2, usando ASP.NET Identity 2.0, la solución fue actualizar el constructor ApplicationUserManager dentro de App_Start \ IdentityConfig.cs así:
fuente
Tuve el mismo problema, cuando intenté cambiar el código para que el nombre de usuario fuera el nombre real de la persona y no el correo electrónico, el sistema me mostró el mismo mensaje de error "El nombre de usuario ABC DEF no es válido, solo puede contener letras o dígitos . " Resolví el problema agregando el carácter de espacio (en mi caso al final) a los caracteres de nombre de usuario permitido.
Estoy usando Asp.Net Core 2.2 y VS2017
Este es mi codigo
Vaya a Startup.cs y edite o agregue la línea debajo de "// configuración de usuario":
fuente
Si está utilizando formularios web ASP.Net y está tratando de lograr esto, simplemente abra su archivo IdentityModels.vb / cs y en Public Class UserManager, haga que se vea así:
fuente
Para las personas en AspNet.Identity.Core 2.1 y versiones posteriores, estos validadores en UserManager son de solo lectura. Las direcciones de correo electrónico como nombres de usuario están permitidas de forma predeterminada, pero si necesita más personalización de los caracteres en sus nombres de usuario, puede hacerlo en Startup.cs de esta manera:
(Necesitaba una '/' por motivos heredados).
fuente
Desde que codifiqué mi propia clase ApplicationUserManager: UserManager no funcionó para mí (tal vez porque uso Razor Pages, no MVC), aquí hay otra solución: En Startup.cs en CofigureServices () puede configurar las Opciones de identidad, por ejemplo:
Más sobre este tema en Microsoft docs: https://docs.microsoft.com/de-de/aspnet/core/security/authentication/identity-configuration?view=aspnetcore-2.2
fuente
Si no puede encontrar IdentityConfig.cs, reemplace su constructor AccountController con este código.
fuente
En mi caso, tenía una clase de repositorio que trabajaba con autenticación, que no me permitió usar un "-" dentro de los nombres de usuario. La solución estaba dentro del constructor aquí:
fuente
También me quedé atascado con esto porque la mayoría de las veces los nombres de usuario son correos electrónicos en estos días, aunque puedo entender el razonamiento de un campo de correo electrónico separado. Estos son puramente mis pensamientos / experiencia, ya que tampoco pude encontrar la opinión de Microsoft sobre esto.
Recuerde, Asp Identity es puramente para identificar a alguien, no es necesario tener un E-mail para ser identificado pero nos permiten almacenarlo porque forma parte de una identidad. Cuando crea un nuevo proyecto web en Visual Studio, tiene la opción de opciones de autenticación.
Si selecciona un tipo de proyecto que no esté vacío, como MVC, y establece la autenticación en "Cuentas individuales", obtendrá los fundamentos básicos para la gestión de usuarios. Uno de los cuales incluye una subclase con este aspecto dentro de App_Start \ IdentityConfig.cs:
Lo que esto nos dice es que Microsoft tiene la intención de que almacenemos nombres de usuario más complejos (consulte AllowOnlyAlphaNumericUserNames = false), por lo que realmente tenemos señales mixtas.
El hecho de que esto se genere a partir de un proyecto web predeterminado nos da una buena indicación / dirección de Microsoft (y una forma limpia) para permitirnos ingresar correos electrónicos para el campo de nombre de usuario. Está limpio porque el método de creación estático se usa dentro de App_Start \ Startup.Auth.cs al arrancar la aplicación con el contexto Microsoft.OWIN.
El único inconveniente de este enfoque es que terminas almacenando el correo electrónico dos veces ... ¡Lo cual no es bueno!
fuente
Como probablemente habrá descubierto (y era de esperar), ASP.NET Identity 2.0.0, lanzado en marzo de 2014, agrega esta funcionalidad en el marco.
Anuncio: http://blogs.msdn.com/b/webdev/archive/2014/03/20/test-announcing-rtm-of-asp-net-identity-2-0-0.aspx
Ejemplo completo y tutorial, incluida la confirmación de la cuenta: http://www.asp.net/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity
fuente
Si está utilizando IOC de algún tipo (estoy usando StructureMap) en su controlador de cuenta, deberá aplicar la corrección mencionada anteriormente por Hao Kung cuando se pase el Usermanager: (tenía que hacerlo). Puede que haya una forma de hacerlo en la configuración de IOC, pero no sé cómo.
fuente
Me he enfrentado al mismo problema. pero finalmente resolví el problema agregando la parte inferior a mi método, no al constructor.
fuente