0

인증 메커니즘에 SimpleMEmbershipProvider를 사용하는 MVC4 응용 프로그램이 있습니다.SimpleMembershipProvider 역할에 액세스 할 수 없습니다.

모든 것이 정상적으로 작동하고 응용 프로그램으로 돌아와서 영구 쿠키를 사용하여 인증 할 때도 마찬가지입니다.

인증을 받았지만 할당 된 역할에 액세스 할 수 없습니다. 효과적으로, 모든 역할을 액세스 할 수 없습니다

string.Join(",", Roles.GetRolesForUser(User.Identity.Name)) 

반환 빈 문자열

을 그 원인이 될 수있는 무엇?

답변

4

SimpleMembershipProvider가 초기화되지 않은 경우 발생할 수 있습니다. 예제 MVC 폼 인증 템플릿은 사용자가 사이트에 대한 익명 액세스를 허용하고 로그인 페이지로 갈 때까지 멤버 자격 공급자를 초기화하지 않는다고 가정합니다. 그러나보다 일반적인 보안 기술은 모든 사이트 액세스에 대한 로그인을 요구하고 _layout 페이지의 메뉴 선택을 역할에 의해 결정되도록 정의하는 것입니다. 그러나 영구 쿠키를 사용하는 경우 로그인 페이지를 다시 방문하지 않아 인증 된 사용자의 역할이 멤버십 데이터베이스에서로드되지 않습니다.

값을로드 할 수 있도록 사용자가 사이트에 입장 할 때 공급자를 초기화해야합니다. 이렇게하려면, 당신은 쿠키 인증 된 사용자가 사이트에 들어갈 때

filters.Add(new YourAppNameSpace.Filters.InitializeSimpleMembershipAttribute()); 

이 사용자의 데이터가 데이터베이스에서로드되는 원인이됩니다 App_Start 폴더에 FilterConfig 클래스의 RegisterGlobalFilters 방법에서 다음 필터를 추가 할 .

또 다른 대체 기술은 쿠키가 사용자가 직접 입력 할 수있는 컨트롤러 메서드에 [InitializeSimpleMembership] 데코레이터를 추가하는 것입니다. 이것은 많은 종류의 컨트롤러에 넣어야한다면 다소 지저분합니다. 따라서 대부분의 경우 전역 필터에 배치하는 것이 좋습니다.

+0

대단히 감사합니다. 너는 생명의 은인이야! – Bartosz

+2

Filters.InitializeSimpleMembershipAttribute()가 존재하지 않습니다. – user2254436