3

최근에 ASP.NET MVC로 작업을 시작했지만 클래식 ASP.NET에도이 질문이 적용됩니다. 그게 가치있는 일이라면, 나는 폼 인증과 멤버쉽 제공자들에 관해서도 많이 모른다.ASP.NET : 사용자 정의 사용자 테이블이있는 사용자 정의 멤버쉽 공급자

내 데이터베이스에 내 자신의 사용자 정의 사용자 테이블에 연결될 내 MembershipProvider을 쓰려고합니다. 내 사용자 테이블에는 사용자 이름, 암호, 암호 소금, 전자 메일 주소 등과 같은 기본 사용자 정보뿐만 아니라 이름, 성 및 거주 국가와 같은 정보가 포함됩니다.

는 지금까지 내가 이해, ASP.NET에서의 표준 방법은없이 추가 정보와 추가 정보 다음 "프로필"테이블을 사용자 테이블 을 만드는 것입니다. 그러나이 정보에 액세스해야 할 때마다 추가 데이터베이스 쿼리를 만들어야하기 때문에 이것은 나에게 매우 좋지 않습니다.

"Pro ASP.NET 3.5 in C# 2008"에서는 프로필 테이블에 많이 액세스해야하는 경우 프로필에 별도의 테이블을 사용하는 것이 좋습니다. 웹 사이트.

이제 문제가 생겼습니다 ... 제가 말했듯이, 저는 MembershipProvider 서브 클래스를 작성하고 있습니다. 지금까지 꽤 잘 진행되었지만, 지금은 CreateUser이 나를 허용하지 않습니다. 내가 원하는 방식으로 사용자를 만들 수 있습니다. 이 방법은 단지 고정 된 수의 인수를 취하고 성, 성 및 거주 국가는 이들의 일부가 아닙니다.

그래서 CreateUser에있는 MembershipProvider에이 정보가없는 사용자 정의 테이블에 새 사용자에 대한 항목을 어떻게 만듭니 까?

답변

3

나는 당신이 당신의 접근 방식을 계속하여 구현에 새로운 기능을 추가해야한다고 생각한다. CreateUser 메소드에 과부하가 걸리고 CustomMembershipUser (MembershipUser가 확장 됨)가 매개 변수로 사용된다. 그런 식으로 공급자를 사용하기 전에 CustomMembershipProvider로 캐스팅하고 오버로드 된 메서드를 사용하십시오.

+0

+1 - 죽은 간단한 멤버십/프로필 전략을 사용하여 죽은 사람이 설정되면 xxxUser 메서드를 오버로드하는 것이 최선의 방법이라고 생각하면 많은 캐싱을 수행하여로드를 줄일 수 있습니다. –

+0

흥미 롭습니다 ... 누군가가 커스텀 MembershipProvider를 구현하고 'CreateUser'에서'null '을 반환하는 비디오 튜토리얼을 보았습니다. 반환 값이 아무것도 사용되지 않아야합니까? –

2

회원 정보와 프로필 정보를 동일한 테이블에 보관해야한다는 데 동의합니다. CreateUser에서 사용하는 매개 변수의 수에 제한을받는 것이 맞으므로 비회원 프로필 속성을 null로 지정할 수 있도록 필드를 디자인해야합니다. 그러나 데이터베이스에 null 인 필드가 필요하다는 의미는 아닙니다. 대신, 당신은 당신이 아래의 미리보기 할 수 있습니다 이런 식으로

string username = .../ retrieve username here 

Membership.CreateUser(username , password, email); 

ProfileBase newProfile = Profile.Create(username); //since the user has just been created, all properties will be blank 

//set all entered properties 
newProfile.SetPropertyValue("MyProp1", myProp1Value); 
... 
newProfile.SetPropertyValue("MyPropN", myPropNValue); 

newProfile.Save(); 

를, 사용자를 만들 수 ASP.NET의 멤버 자격 공급자를 활용하고 프로파일 데이터를 저장하지만, 최종 사용자에게 하나의 원자 작업이다.

관련 문제