2013-03-02 3 views
6

새로운 MVC4 응용 프로그램 생성 USERPROFILE 테이블을 사용자 아이디 (int)를 가져옵니다 사용자 이름 (NVARCHAR) 컨트롤러에서새로운 MVC4 응용 프로그램에서

는 :

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

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

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

나는 스레드를 많이 읽고 그들 모두는 심지어 사용자 및 회원 테이블에없는 GUID를, 점점 이야기.

현재 로그인 한 사용자의 UserId (int)를 가져 오는 방법이 있습니까?

+0

을받을 수 있나요? – andri

+1

@andri, 광고 FK를 다른 테이블에 저장합니다. – mishap

+0

왜 사용자 이름을 FK로 사용하지 않습니까? 사용자 이름은 고유하지 않습니까? – andri

답변

0

mu1mu2에는 사용자가 성공적으로 인증 된 경우 MembershipUser의 인스턴스가 포함됩니다. MembershipUserobject 유형의 ProviderUserKey 속성을 가지며이 속성은 사용자의 식별자를 포함합니다.

Membership.GetUser()에는 응용 프로그램 및 사용자 인증을 위해 MembershipProvider가 필요합니다. null이 반환되었으므로 위의 조건 중 하나가 충족되지 않았 음을 나타냅니다.

3

당신은

WebSecurity.GetUserId(User.Identity.Name); 

추가 정보를 int로서 사용자 아이디를 얻을 수 있습니다 : 당신이 AccountController 아닌 다른 컨트롤러를 사용하는 경우는 컨트롤러 클래스의 상단에 [InitializeSimpleMembership]을 추가해야합니다.

12

디렉토리의 InitializeSimpleMembershipAttribute.cs 디렉토리를 통해 간단한 회원 자격을 초기화 할 수 있도록 컨트롤러 상단에 [InitializeSimpleMembership]을 추가해야합니다.

그럼 당신은 여러 가지 방법으로 사용자 ID에 액세스 할 수 있습니다 : 당신이 ID를 필요합니까 왜

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

My InitializeSimpleMembershipAttribute가 Filters \ InitializeSimpleMembershipAttribute에 있으므로 컨트롤러 맨 위에'use RecreationalServicesTicketingSystem.Filters; '를 추가했지만 내 int'mu1 = (int) WebSecurity.CurrentUserId; '는'Websecurity '라는 이름이 존재하지 않습니다. 현재 상황에서 그래서'WebMatrix.WebData 사용하기 '를 사용했는데, 여전히 작동할까요? – TykiMikk

0

당신은 사용자 아이디

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