2013-03-02 13 views
6

Nuova applicazione MVC4 creata tavolo ProfiloUtente:Get UserId (int) nella nuova applicazione MVC4

UserId (int) | Nome utente (nvarchar)

In regolatore:

string currentUser = User.Identity.Name; // returns UserName 

    var mu1 = Membership.GetUser(); // returns null 

    var mu2 = Membership.GetUser(currentUser); // returns null as well 

ho letto un sacco di discussioni e tutti parlano di ottenere GUID, che non hanno nemmeno nelle tabelle degli utenti e appartenenza.

C'è un modo per ottenere UserId (int) dell'utente attualmente connesso?

+0

Perché avete bisogno l'id? – andri

+1

@andri, per memorizzare l'annuncio FK in un'altra tabella. – mishap

+0

Perché non usare il nome utente come FK? Il nome utente è unico, non è vero? – andri

risposta

0

mu1 e mu2 conterrà un'istanza di MembershipUser se l'utente è stato autenticato correttamente. MembershipUser ha una proprietà ProviderUserKey di tipo object che conterrà l'identificatore per un utente.

Membership.GetUser() richiede un membro MembershipProvider per essere collegato per l'applicazione e per l'utente per essere autenticato; poiché si vede restituito null, ciò suggerirebbe che una delle condizioni di cui sopra non è soddisfatta.

3

È possibile ottenere UserId int con

WebSecurity.GetUserId(User.Identity.Name); 

Informazioni aggiuntive: Si dovrebbe aggiungere [InitializeSimpleMembership] sulla parte superiore della classe controller se si utilizza un altro controller di AccountController.

12

Assicurati di aggiungere [InitializeSimpleMembership] alla parte superiore del controller in modo che inizializza l'appartenenza facile con il file nella directory InitializeSimpleMembershipAttribute.csFilters.

Poi si può accedere l'ID utente in diversi modi:

int mu1 = (int)WebSecurity.CurrentUserId; 
int mu2 = (int)Membership.GetUser().ProviderUserKey; 
+0

My InitializeSimpleMembershipAttribute si trova in Filters \ InitializeSimpleMembershipAttribute, quindi ho aggiunto 'utilizzando RecreationalServicesTicketingSystem.Filters;' nella parte superiore del mio controller ma il mio int 'mu1 = (int) WebSecurity.CurrentUserId;' mi dà 'Il nome 'Websecurity' non esiste nel contesto attuale. Quindi ho usato 'usando WebMatrix.WebData;' funzionerà ancora? – TykiMikk

0

è possibile ottenere UserId

if (Request.IsAuthenticated) 
{ 
    var membership = (SimpleMembershipProvider)Membership.Provider; 
    int idUser = membership.GetUserId(User.Identity.Name); 
}