7

Sur cette ligne, je reçois une exception -MembershipCreateUserException - Le nom d'utilisateur fourni est invalide

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

System.Web.Security.MembershipCreateUserException: Le nom d'utilisateur fourni est invalide.

Les données vont dans c'est

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

L'initialisation fonctionne très bien utilisant

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

Je ne trouve pas d'exemples de pourquoi il est dit que le nom d'utilisateur est invalide? Existe-t-il un critère définissant un nom d'utilisateur correct?

+0

Je pense que le nom d'utilisateur est probablement l'adresse email. Au moins, c'est ce que Facebook me demande quand je me connecte. –

Répondre

14

que je cherchais même pour une explication à ce sujet. Je ne suis pas sûr de bien comprendre, mais après l'expérimentation, le débogage et l'observation des événements intellitrace, il semble que CreateOrUpdateAccount crée ou mette à jour une entrée dans la table OAuthMembership avec seulement Provider, ProviderUserId et UserId qui est déterminé en interrogeant [dans mon cas ] la table UserProfile basée sur ce nom d'utilisateur unique. De cette façon, si vous appelez CreateOrUpdateAccount avec un fournisseur différent et providerUserId, mais le même nom d'utilisateur, les deux insertions de fournisseur sont liées au même compte d'utilisateur dans votre application.

J'ai dû ajouter un UserProfile avant de pouvoir créer/mettre à jour l'enregistrement OAuthMembership correspondant. Dans le modèle VS, il ressemblait à quelque chose comme ceci:

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

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

Cela a fonctionné .. merci. – MoXplod

+0

Ce code a fonctionné mais maintenant j'ai introduit 'WebMatrix.WebData.WebSecurity' donc je dois utiliser' WebSecurity.CreateUserAndAccount (model.UserName, Guid.NewGuid(). ToString()); 'où Guid.NewGuid() est un mot de passe aléatoire pratique – ajd

-1

Nom d'utilisateur ne devrait pas avoir aussi un espace comme « Max Payne »

5

J'ai eu le même problème. Je l'ai résolu en spécifiant la chaîne de connexion correcte dans les classes SimpleMembershipInitializer et UsersContext. J'utilise ASP.NET MVC4

1

Il se peut que vous soyez déjà connecté @ localhost en tant que personne sur un autre site que vous développez. Et vous utilisez le même cookie d'authentification de nom (par défaut est .aspxauth). Ainsi, lorsque vous appelez CreateOrUpdate, il tente d'ajouter un autre identifiant à votre profil déjà "enregistré". Mais échoue, car ce n'est pas dans la base de données. Pour résoudre le problème, vous devez ensuite supprimer le cookie d'authentification du navigateur et vous connecter à nouveau.

0

Selon MSDN (http://msdn.microsoft.com/en-us/library/82xx2e62.aspx) la classe d'appartenance ne peut pas prendre en charge les noms d'utilisateur avec une virgule ou null, les espaces sont OK (comme les caractères non ascii).

La méthode de CreateUser retourne null si le mot de passe est une chaîne vide ou nulle, nom d'utilisateur est une chaîne vide ou nulle ou contient une virgule (,), passwordQuestion est non nul et est une chaîne vide, ou passwordAnswer est non nul et contient une chaîne vide.

0

Pour moi, cette erreur s'est produite dans mon override Seed. Comme rgnever a indiqué que le nom d'utilisateur n'existe pas, il fait référence à la table UserProfile. Pour résoudre ce problème, l'utilisateur et le compte doivent d'abord être créés avant de créer l'OAuth.

Ainsi, au lieu de mon remplacement des semences SEULEMENT appelant:

membership.CreateOrUpdateOAuthAccount(provider, providerid, providername); 

il appelle maintenant:

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

Remarque: Le mot de passe null signifie que l'utilisateur ne peut pas se connecter via un formulaire de connexion parce que le fourni le mot de passe ne sera jamais nul. J'utilise seulement OAuth donc ce n'est pas un problème pour moi.

Questions connexes