2012-10-28 1 views
1

여러 ASP.NET MVC 1 및 2 사이트를 수행했습니다. 어떻게 든 나는 v3를 건너 뛸 수 있었다. 새로운 ASP.NET MVC 4 사이트를 만들고 있는데 멤버쉽 항목이 완전히 변경된 것을 볼 수 있습니다.ASP.NET MVC4에서 SimpleMembership 인증을 확장하는 방법

처음에는 행복했습니다. 설치 및 사용이 쉬워 보였으며 인터넷 프로젝트 템플릿에는 시작하는 데 필요한 모든 클래스와 뷰가 제공되었습니다.

불행히도, 나는 완전히 갇혀 있습니다. 사용자를 인증하는 코드를 확장해야합니다. 기본적으로 웹 서비스에 대한 일부 사용자와 로컬 데이터베이스에 대한 다른 사용자를 인증해야합니다. 두 유형의 사용자 모두 로컬 데이터베이스에 프로파일 데이터가 저장됩니다.

내 문제는 SimpleMembership을 확장하는 방법을 찾을 수 없다는 것입니다.

이전 멤버 자격 공급자 모델에서 SqlMembership을 상속하고 ValidateUser()를 재정의하고 기본 클래스를 호출하거나 웹 서비스를 호출 할 때 스태프를 가져 왔습니다.

내가의 web.config의 기본 멤버 자격 공급자로 구성 후 SimpleMembership에서 inherites 내 프로젝트의 클래스를 생성하고 그런 일을 시도 못했지만, 그건 그냥 나에게 오류를 준

Parser Error Message: This method cannot be called during the application's pre-start initialization phase. 

Line 32:  <membership defaultProvider="ssund"> 
Line 33:  <providers> 
Line 34:   <add name="ssund" type="Ssund.Web.Providers.SsundSimpleMembershipProvider"/> 
Line 35:  </providers> 
Line 36:  </membership> 

답변

1

SimpleMembershipProvider까지 확장 할 수 있지만 공급자가 초기화되는 비정상적이고 제한적인 방식으로 인해 즐거운 경험이 아닙니다.

WebSecurity.InitializeDatabaseConnection 호출을 통해 공급자가 초기화되지만 Web.Config을 통해 공급자를 명시 적으로 설정하는 것은 유효합니다. 그것들이 SimpleMembershipProvider에서 나온다면 그들은 초기화 중에 올바르게 설정 될 것입니다.

사실 당신은 WebSecurity API를 사용하기 위해 자신의 ExtendedMembershipProvider을 구현, 그리고 (그것은 단지 SimpleMembershipProvider 기반 구현을 위해의) 모두에서 WebSecurity.InitializeDatabaseConnection를 호출 할 수 있습니다. 단점은 이것이 처음부터 이것을 구축하기위한 많은 노력이다.

오류는 아마도 공급자의 Initialize 루틴 내에서 뭔가를 수행했기 때문에 초기에 파이프 라인에 대한 공급자와의 상호 작용 때문에 발생했습니다.

SimpleMembershipProviderMembershipProvider의 차이점에 대한 자세한 내용은 SimpleMembershipProvider vs MembershipProvider을 참조하십시오. SimpleMembershipProvider을 확장하는 예는 BetterMembership.Net을 참조하십시오.

3

SimpleMembershipweb.config에 구성되어 있지 않으므로 InitializeSimpleMembershipAttribute.cs 파일에 있습니다.

사용되는 WebSecurity 클래스의 구현을 확장 할 수 없으며 SimpleMembershipProvider를 하드 코딩합니다.

SimpleMembership을 사용할 필요가 없습니다. 이전 멤버 자격 인프라를 사용하도록 되돌릴 수 있습니다.