1

나는 로그인과 레지스터를 만들 때 항상 내 자신의 코드를 사용했지만 멤버십을 사용하면 다음 프로젝트에서 프로그래밍 할 때 많은 시간을 절약 할 수 있습니다.맞춤 멤버십 구현

이제 사용자 지정 멤버십을 구현하는 데 필요한 자습서가 많이 있으며 그 중 일부는 다른 멤버와 다릅니다. 그리고 간단한 사용자 정의 멤버십 구현을 구현하는 최선의 해결책이 무엇인지 이해하기가 힘듭니다.

 public class CustomMembershipUser : MembershipUser 
{ 
    public CustomMembershipUser(
     string providerName, 
     string name, 
     object providerUserKey, 
     string email, 
     string passwordQuestion, 
     string comment, 
     bool isApproved, 
     bool isLockedOut, 
     DateTime creationDate, 
     DateTime lastLoginDate, 
     DateTime lastActivityDate, 
     DateTime lastPasswordChangedDate, 
     DateTime lastLockoutDate 
     ) 
     : base(providerName, name, providerUserKey, email, passwordQuestion, 
     comment, isApproved, isLockedOut, creationDate, lastLoginDate, 
     lastActivityDate, lastPasswordChangedDate, lastLockoutDate) 
    { 
    } 

    // Add additional properties 
    public string Streetname { get; set; } 
    public string Postcode { get; set; } 

} 

public abstract class CustomMembershipProvider : MembershipProvider 
{ 

    public override MembershipUser GetUser(string username, bool userIsOnline) 
    { 
     // get data logic 
     var user = new CustomMembershipUser(
        "CustomMembershipProvider", 
        "naam", 
        "1", 
        "[email protected]", 
        "", 
        "", 
        true, 
        false, 
        DateTime.Now, 
        DateTime.MinValue, 
        DateTime.MinValue, 
        DateTime.MinValue, 
        DateTime.MinValue) { Streetname = "Test", Postcode = "Test2"}; 

     return user; 

    } 

    public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, 
     bool isApproved, object providerUserKey, out MembershipCreateStatus status) 
    { 
     var user = new CustomMembershipUser(
       "CustomMembershipProvider", 
       "naam", 
       "1", 
       "[email protected]", 
       "", 
       "", 
       true, 
       false, 
       DateTime.Now, 
       DateTime.MinValue, 
       DateTime.MinValue, 
       DateTime.MinValue, 
       DateTime.MinValue) { Streetname = "Test", Postcode = "Test2" }; 
     status = MembershipCreateStatus.Success; 
     return user; 
    } 
} 

이에 가장 적합한 솔루션입니다 : 난 그냥 streetname과 같은 몇 가지 추가 사용자 정보를 추가 할 필요가이 프로젝트, 우편 번호 등

내가 뭘 현재했습니다 것은 이것이다 내 맞춤 회원 또는 더 나은 옵션이 있습니까?

아직 테스트하지 않았으므로이 방법이 효과가 있는지 잘 모르겠습니다. 내가 MVC 4

답변

1

회원에 대해 가장 먼저 알아야 할 점은 이름, 주소 등과는 아무런 관련이 없다는 것입니다. 이것은 엄격하게 사용자 ID, 사용자 이름, 암호 및 인증에 관한 것입니다. 그게 전부 야. 이름과 주소를 추가하기 위해 그것을 확장하려고하지 마십시오. 그것이 그 것이 아닙니다.

대신 자신의 "UserProfile"테이블이나 원하는 것을 무엇이든 만들면됩니다. 이 테이블은 멤버 자격 공급자가 제공 한 ProviderUserKey에 입력해야합니다. 그렇다면 UserProfile 테이블에서 원하는 데이터 만 조회하여 Membership과 관련된 사항을 수정하지 않아도됩니다.

따라서 귀하의 경우 GUID를 사용하여 표준 멤버 자격 공급자를 사용할 수 있습니다. 그런 다음 3 개의 열이있는 UserProfile 테이블을 만듭니다. UserId (uniqueidentifier), StreetName 및 PostalCode.

응용 프로그램에서 Membership.GetUser()를 호출합니다.ProviderUserKey를 사용하여 UserProfile 테이블의 데이터를 조회하는 키로 사용하십시오. 이것은 빠르고 간단하며 회원 자격을 수정하지 않아도됩니다.

AccountController.Register 메서드에서 멤버십 사용자를 만든 후에도 사용자가 ProviderUserKey 인 사용자 프로필 레코드와 저장하려는 정보를 만듭니다.

1

을 사용하고

나는 ASP.NET 신원을 사용하는 것이 좋습니다 : http://www.asp.net/identity

는에 정상 IdentityUser를 수집 상대적으로 쉽게 무엇의 추가 데이터를 추가하려면. 여기에 기본 사용자 표입니다 :

  • 이드에 탑이 데이터를 추가하려면
  • 사용자 이름
  • PasswordHash
  • SecurityStamp

, 당신은 단순히 IdentityUser에서 상속 :

public class AppUser : IdentityUser 
{ 
    // Add additional properties 
    public string Streetname { get; set; } 
    public string Postcode { get; set; } 
} 

추가 f ields가 필요하지만, MembershipProvider은 이해할 수있는 한 오래된 인증 시스템입니다. ASP.NET ID는 훨씬 유연하고 개방적입니다.

Profile 클래스의 모든 추가 필드를 상쇄 할 것을 제안합니다.이 모든 다양한 필드가 포함 된 사용자 테이블 대신 프로파일 테이블을 채우는 것이 훨씬 낫습니다. 개인적 취향에 따른다.