2013-03-02 14 views
6

Utworzono nową aplikację MVC4 Tabela UserProfile:Pobierz UserId (int) w nowej aplikacji MVC4

UserId (int) | Nazwa_użytkownika (nvarchar)

W sterowniku:

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

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

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

Czytałem wiele wątków i wszyscy mówią o coraz GUID które nie mają nawet w tabelach użytkownika i członkostwa.

Czy istnieje sposób na uzyskanie UserId (int) aktualnie zalogowanego użytkownika?

+0

Dlaczego musisz id? – andri

+1

@andri, aby przechowywać reklamę FK w innej tabeli. – mishap

+0

Dlaczego nie używać nazwy użytkownika jako FK? Nazwa użytkownika jest unikalna, prawda? – andri

Odpowiedz

0

mu1 i mu2 będzie zawierać wystąpienie MembershipUser, jeśli użytkownik został pomyślnie uwierzytelniony. MembershipUser ma właściwość ProviderUserKey typu object, która będzie zawierać identyfikator dla użytkownika.

Membership.GetUser() wymaga, aby Użytkownik członkowski został podłączony do aplikacji i aby użytkownik mógł zostać uwierzytelniony; ponieważ widzisz, że zwrócono null, sugerowałoby to, że jeden z wyżej wymienionych warunków nie jest spełniony.

3

Można uzyskać userid jako int z

WebSecurity.GetUserId(User.Identity.Name); 

Dodatkowe informacje: Należy dodać [InitializeSimpleMembership] na szczycie klasy kontrolera jeśli używasz innego kontrolera niż AccountController.

12

Upewnij się dodać [InitializeSimpleMembership] na górze kontrolera tak, że inicjuje proste członkostwa poprzez plik InitializeSimpleMembershipAttribute.cs w katalogu Filters.

Następnie można uzyskać dostęp do identyfikatora użytkownika na wiele różnych sposobów:

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

Moja InitializeSimpleMembershipAttribute znajduje się w Filters \ InitializeSimpleMembershipAttribute, więc dodałem 'using RecreationalServicesTicketingSystem.Filters;' na moim kontrolerze ale mój int 'mu1 = (int) WebSecurity.CurrentUserId;' daje mi 'Nazwa 'Websecurity' nie istnieje w obecnym kontekście. Więc użyłem 'using WebMatrix.WebData;' będzie to nadal działa? – TykiMikk

0

Można uzyskać userid

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