2011-01-17 7 views
1

Sharepoint 2010에서 FBA (클레임 기반 인증)를 구현했습니다. 다음이 구현됩니다. Sharepoint 2010의 FBA

  • 사용자 정의 로그인 페이지
  • 사용자 정의 로그인 페이지 ForgetPassword 페이지 사용자에
    자신의 이메일 주소를 입력하도록 요청
  • 암호 복구 페이지 (ForgetPassword.aspx이)가 사용
  • 동안 로그인 및에

    코드 뒤에이 전자 메일을 사용하여 Membership.GetUserNameByEmail 함수를 사용하여 UserName을 가져온 다음 Membership.GetUser 함수에이 사용자 이름을 전달하면 사용자 자격 증명을 메일로 보낼 수 있습니다.

하지만 이제 코드가 "함수가 구현되지 않았습니다."라는 예외로 throw됩니다. 궁금; 사용자 지정 멤버쉽 공급자를 만들려면 어떤 사용자 지정 데이터베이스도 사용하고 있지 않습니다. 그런데 왜이 오류가 발생합니다. 누군가가 단서가 있거나 유사한 문제에 직면하면 알려주십시오. 감사. FBA가 SharePoint 2010을 위해 구성된 경우, 두 멤버 자격 공급자가 web.config 파일에 정의되어 있습니다

+0

. 암호는 해시로 저장되지만 성공적으로 로그인 할 수 있습니다. 문제는 내가 "string textUserName = Membership.GetUserNameByEmail (txtemailid.Text); 사용자가 입력 한 이메일 주소를 사용하여 사용자 이름을 얻으려고 할 때입니다." 그것은 위에서 언급 한 오류가 발생합니다. 감사합니다. Paddy – Paddy

+1

맞춤 멤버쉽 제공자를 만들지 않았습니다. "System.Web.Security"를 페이지로드시에 포함 시켰습니다. 모든 매개 변수를 검사하고 사용자가 올바른 전자 메일 ID를 제공 한 경우 암호를 재설정하고 MembershipUser.ResetPassword()를 사용하여 사용자에게 보내려고합니다. 나는 당신의 질문을 정확하게 이해하기를 바랍니다. Thanks Paddy – Paddy

+0

<이름 추가 = "FBAMembership"type = "System.Web.Security.SqlMembershipProvider, System.Web, Version = 2.0.0.0, Culture = 중립, PublicKeyToken = b03f5f7f11d50a3a "applicationName ="/ "connectionStringName ="AspNetSqlProvider "enablePasswordReset ="true "passwordFormat ="true "requiresQuestionAndAnswer ="false "requiresUniqueEmail ="true "/> – Paddy

답변

1


감사합니다 패디 - Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider이와 System.Web.Security.SqlMembershipProvider (보통 내가 이름) (이 경우 FBAMembership이름). FBA 인증이 제대로 작동하려면 기본 멤버십 제공 업체가 이전 멤버 (예 : SharePoint 청구자)로 설정되어야합니다.

Membership.GetUserNameByEmail(...)이 포함 된 줄을 실행하면 기본 멤버 자격 공급자가 사용되며 결과적으로 SPClaimsAuthMembershipProvider.GetUserNameByEmail이 호출됩니다. MSDN은이 메서드 이 내부 용으로 예약되었으며 코드에서 직접 사용할 수 없으며 커뮤니티 콘텐츠 섹션의 주석에 따라 NotImplementedException을 던집니다.

Membership.Providers 컬렉션에서 SqlMembershipProvider 공급자의 인스턴스를 검색 한 다음이 인스턴스를 사용하여 GetUserNameByEmail 메서드를 호출해야합니다. web.config 파일 제공자를 구성 할 때


나는 접두사를 사용하고이처럼 검색 : 그들은 작성되는 일반 SQL 데이터베이스에 저장됩니다

string applicationNamePrefix = "fbaProvider_"; 
MembershipProvider fbaProvider; 

foreach (MembershipProvider provider in Membership.Providers) 
{ 
    if (provider.ApplicationName.StartsWith(applicationNamePrefix, StringComparison.InvariantCultureIgnoreCase)) 
    { 
     fbaProvider = provider; 
    } 
} 

throw new InvalidOperationException("Appropriate provider was not found."); 
+0

안녕 마렉 , 위에서 언급 한 마지막 단락을 지원하는 샘플 코드가 있습니까? – Paddy

+0

@Paddy 답변을 업데이트했습니다. 필요한 것이 무엇인지 알려주세요. –

+0

@Marek ... Thx a ton !!!! – Paddy