2012-10-12 61 views
7

En esta línea que estoy recibiendo una excepción -MembershipCreateUserException - El nombre de usuario proporcionado no es válido

OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName); 

System.Web.Security.MembershipCreateUserException: El nombre de usuario proporcionado no es válido.

Los datos que entran en esto es

  • proveedor - "facebook"
  • providerUserId - "1321311387573991"
  • model.UserName - "Max Payne"

La inicialización funciona bien utilizando

WebSecurity.InitializeDatabaseConnection("club", "User", "UserID", "UserName", autoCreateTables: true); 

¿No puedo encontrar ningún ejemplo de por qué dice que el nombre de usuario no es válido? ¿Existe algún criterio en algún lugar que defina qué es un nombre de usuario correcto?

+0

Creo que el nombre de usuario probablemente sea la dirección de correo electrónico. Al menos eso es lo que Facebook me pide cuando inicio sesión. –

Respuesta

14

estaba similarmente en busca de una explicación a esto. No estoy seguro de entender por completo, pero después de la experimentación, depuración y observación de eventos de inteligencia, parece que CreateOrUpdateAccount está creando o actualizando una entrada en la tabla OAuthMembership con solo Provider, ProviderUserId y UserId, que se determina consultando [en mi caso ] la tabla UserProfile basada en este UserName único. De esta forma, si llama a CreateOrUpdateAccount con un proveedor diferente y providerUserId, pero con el mismo nombre de usuario, ambos registros de proveedor están vinculados a la misma cuenta de usuario en su aplicación.

Tuve que agregar un perfil de usuario antes de poder crear/actualizar el registro correspondiente de OAuthMembership. En la plantilla VS, se veía algo como esto:

db.UserProfiles.Add(new UserProfile { UserName = model.UserName }); 
db.SaveChanges(); 

OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName); 
+0

Eso funcionó ... gracias. – MoXplod

+0

Este código funcionó, pero ahora introduje 'WebMatrix.WebData.WebSecurity', así que tengo que usar' WebSecurity.CreateUserAndcount (model.UserName, Guid.NewGuid(). ToString()); 'donde Guid.NewGuid() es una contraseña aleatoria conveniente – ajd

-1

nombre de usuario tampoco debe tener un espacio como "Max Payne"

5

Tuve el mismo problema. Lo resolví especificando la cadena de conexión correcta en SimpleMembershipInitializer y UsersContext class. Estoy usando ASP.NET MVC4

1

Es posible que ya haya iniciado sesión en @ localhost como alguien en otro sitio que está desarrollando. Y usa la misma cookie de autenticación de nombre (el valor predeterminado es .aspxauth). Entonces, cuando llamas a CreateOrUpdate, intenta agregar otra credencial a tu perfil ya "registrado". Pero falla, porque no está en la base de datos.

Para resolver el problema, debe eliminar la cookie de autenticación del navegador e iniciar sesión de nuevo.

0

De acuerdo con MSDN (http://msdn.microsoft.com/en-us/library/82xx2e62.aspx) la clase de membresía no admite nombres de usuario con una coma o nulo, los espacios son correctos (ya que no son caracteres ascii).

El método CreateUser devolverá NULL si la contraseña es una cadena vacía o nula, nombre de usuario es una cadena vacía o nula o contiene una coma (,), passwordQuestion no es nulo y es una cadena vacía, o passwordAnswer es no nulo y contiene una cadena vacía.

0

Para mí, este error ocurrió en mi anulación de Semilla. Como rgnever señaló que el nombre de usuario no existente se refiere a la tabla UserProfile. Para solucionarlo, el Usuario y la Cuenta deben crearse primero antes de crear OAuth.

Así, en lugar de mi anulación de la semilla llamar SOLAMENTE:

membership.CreateOrUpdateOAuthAccount(provider, providerid, providername); 

ahora llamadas:

membership.CreateUserAndAccount(providername, null); 
membership.CreateOrUpdateOAuthAccount(provider, providerid, providername); 

Nota: La contraseña nula significa que el usuario no puede acceder a través de un formulario de acceso debido a que el suministrado la contraseña nunca será nula. Solo uso OAuth, así que no es un problema para mí.

Cuestiones relacionadas