7

Su questa linea mi sto un'eccezione -MembershipCreateUserException - Il nome utente fornito non è valido

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

System.Web.Security.MembershipCreateUserException: Il nome utente fornito non è valido.

I dati che vanno in questo è

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

L'inizializzazione funziona bene using

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

Non riesco a trovare esempi del motivo per cui il nome utente non è valido? Esiste un criterio da qualche parte che definisce che cosa è un nome utente corretto?

+0

Penso che il nome utente sia probabilmente l'indirizzo email. Almeno questo è ciò che Facebook mi chiede quando accedo. –

risposta

14

ero simile alla ricerca di una spiegazione a questo. Non sono sicuro di averlo compreso appieno, ma dopo la sperimentazione, il debugging e la visione degli eventi di Intellitrace, sembra che CreateOrUpdateAccount stia creando o aggiornando una voce nella tabella OAuthMembership con solo Provider, ProviderUserId e UserId che viene determinata interrogando [nel mio caso ] la tabella UserProfile basata su questo UserName univoco. In questo modo, se si chiama CreateOrUpdateAccount con un provider e providerUserId diversi, ma lo stesso nome utente, entrambi i collegamenti del provider sono collegati allo stesso account utente nell'app.

Ho dovuto aggiungere un profilo utente prima di poter creare/aggiornare il record OAuthMembership corrispondente. Nel modello VS, sembrava qualcosa del genere:

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

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

Che ha funzionato .. grazie. – MoXplod

+0

Questo codice DID funziona ma ora ho introdotto 'WebMatrix.WebData.WebSecurity', quindi devo usare' WebSecurity.CreateUserAndAccount (model.UserName, Guid.NewGuid(). ToString()); 'dove Guid.NewGuid() è una comoda password casuale – ajd

-1

Nome utente, inoltre, non dovrebbe avere uno spazio come "Max Payne"

5

Ho avuto lo stesso problema. L'ho risolto specificando la stringa di connessione corretta nella classe SimpleMembershipInitializer e UsersContext. Sto usando ASP.NET MVC4

1

Potrebbe essere che tu sia già registrato su @ localhost come qualcuno su un altro sito che stai sviluppando. E usi il cookie di autenticazione con lo stesso nome (default è .aspxauth). Quindi quando chiami CreateOrUpdate prova ad aggiungere un'altra credenziale al tuo profilo già "registrato". Ma fallisce, perché non è nel database.

Per risolvere il problema, è necessario eliminare il cookie di autenticazione dal browser e accedere di nuovo.

0

In base a MSDN (http://msdn.microsoft.com/en-us/library/82xx2e62.aspx) la classe di appartenenza non può supportare i nomi utente con una virgola o null, gli spazi sono OK (come i caratteri non ascii).

Procedimento CreateUser restituirà null se la password è una stringa vuota o nulla, username è una stringa vuota o null o contiene una virgola (,), passwordQuestion non è nullo ed è una stringa vuota, o passwordAnswer è non null e contiene una stringa vuota.

0

Per me, questo errore si è verificato durante l'override del seme. Come rgnever indicato il nome utente non esistente si riferisce alla tabella UserProfile. Per risolvere il problema, è necessario creare prima l'utente e l'account prima di creare OAuth.

Così, invece della mia esclusione Seed SOLO chiamando:

membership.CreateOrUpdateOAuthAccount(provider, providerid, providername); 

si chiama ora:

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

Nota: la password nulla significa che l'utente non può accedere tramite un form di login, perché quello in dotazione la password non sarà mai nulla. Sto solo usando OAuth quindi non è un problema per me.

Problemi correlati