2013-04-24 2 views
0

저는 상속받을 필요가 있습니다 "회원 등급". 그래서 내가 로그인 제어 및 데이터베이스 "직원"을 통해 사용자를 확인할 수 있습니다. 또한 사용자 생성 마법사를 사용하여 새 사용자를 생성해야하며 세부 정보는 "직원"DB에 저장되어야합니다. 이를 위해서는 CREATE_USER() 메서드를 멤버 클래스에 구현해야합니다. 그러나 CREATE_USER() 메서드의 반환 형식은 MembershipUser입니다.멤버쉽 클래스에서 돌아 오는 방법은 무엇입니까?

반환 형식 인 경우 메서드에서 무엇을 반환해야합니까?

답변

0

참조 : How to: Sample Membership Provider Implementation

확인이 코드 스 니펫

public override MembershipUser CreateUser(string username, 
      string password, 
      string email, 
      string passwordQuestion, 
      string passwordAnswer, 
      bool isApproved, 
      object providerUserKey, 
      out MembershipCreateStatus status) 
    { 
     ValidatePasswordEventArgs args = 
     new ValidatePasswordEventArgs(username, password, true); 

     OnValidatingPassword(args); 

     if (args.Cancel) 
     { 
     status = MembershipCreateStatus.InvalidPassword; 
     return null; 
     } 



     if (RequiresUniqueEmail && GetUserNameByEmail(email) != "") 
     { 
     status = MembershipCreateStatus.DuplicateEmail; 
     return null; 
     } 

     MembershipUser u = GetUser(username, false); 

     if (u == null) 
     { 
     DateTime createDate = DateTime.Now; 

     if (providerUserKey == null) 
     { 
      providerUserKey = Guid.NewGuid(); 
     } 
     else 
     { 
      if (!(providerUserKey is Guid)) 
      { 
      status = MembershipCreateStatus.InvalidProviderUserKey; 
      return null; 
      } 
     } 

     OdbcConnection conn = new OdbcConnection(connectionString); 
     OdbcCommand cmd = new OdbcCommand("INSERT INTO Users " + 
       " (PKID, Username, Password, Email, PasswordQuestion, " + 
       " PasswordAnswer, IsApproved," + 
       " Comment, CreationDate, LastPasswordChangedDate, LastActivityDate," + 
       " ApplicationName, IsLockedOut, LastLockedOutDate," + 
       " FailedPasswordAttemptCount, FailedPasswordAttemptWindowStart, " + 
       " FailedPasswordAnswerAttemptCount, FailedPasswordAnswerAttemptWindowStart)" + 
       " Values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", conn); 

     cmd.Parameters.Add("@PKID", OdbcType.UniqueIdentifier).Value = providerUserKey; 
     cmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username; 
     cmd.Parameters.Add("@Password", OdbcType.VarChar, 255).Value = EncodePassword(password); 
     cmd.Parameters.Add("@Email", OdbcType.VarChar, 128).Value = email; 
     cmd.Parameters.Add("@PasswordQuestion", OdbcType.VarChar, 255).Value = passwordQuestion; 
     cmd.Parameters.Add("@PasswordAnswer", OdbcType.VarChar, 255).Value = EncodePassword(passwordAnswer); 
     cmd.Parameters.Add("@IsApproved", OdbcType.Bit).Value = isApproved; 
     cmd.Parameters.Add("@Comment", OdbcType.VarChar, 255).Value = ""; 
     cmd.Parameters.Add("@CreationDate", OdbcType.DateTime).Value = createDate; 
     cmd.Parameters.Add("@LastPasswordChangedDate", OdbcType.DateTime).Value = createDate; 
     cmd.Parameters.Add("@LastActivityDate", OdbcType.DateTime).Value = createDate; 
     cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName; 
     cmd.Parameters.Add("@IsLockedOut", OdbcType.Bit).Value = false; 
     cmd.Parameters.Add("@LastLockedOutDate", OdbcType.DateTime).Value = createDate; 
     cmd.Parameters.Add("@FailedPasswordAttemptCount", OdbcType.Int).Value = 0; 
     cmd.Parameters.Add("@FailedPasswordAttemptWindowStart", OdbcType.DateTime).Value = createDate; 
     cmd.Parameters.Add("@FailedPasswordAnswerAttemptCount", OdbcType.Int).Value = 0; 
     cmd.Parameters.Add("@FailedPasswordAnswerAttemptWindowStart", OdbcType.DateTime).Value = createDate; 

     try 
     { 
      conn.Open(); 

      int recAdded = cmd.ExecuteNonQuery(); 

      if (recAdded > 0) 
      { 
      status = MembershipCreateStatus.Success; 
      } 
      else 
      { 
      status = MembershipCreateStatus.UserRejected; 
      } 
     } 
     catch (OdbcException e) 
     { 
      if (WriteExceptionsToEventLog) 
      { 
      WriteToEventLog(e, "CreateUser"); 
      } 

      status = MembershipCreateStatus.ProviderError; 
     } 
     finally 
     { 
      conn.Close(); 
     } 


     return GetUser(username, false);  
     }   
     else 
     { 
     status = MembershipCreateStatus.DuplicateUserName; 
     } 


     return null; 
    } 

/// //
// MembershipProvider.GetUser (문자열, 부울) //

public override MembershipUser GetUser(string username, bool userIsOnline) 
{ 
    OdbcConnection conn = new OdbcConnection(connectionString); 
    OdbcCommand cmd = new OdbcCommand("SELECT PKID, Username, Email, PasswordQuestion," + 
     " Comment, IsApproved, IsLockedOut, CreationDate, LastLoginDate," + 
     " LastActivityDate, LastPasswordChangedDate, LastLockedOutDate" + 
     " FROM Users WHERE Username = ? AND ApplicationName = ?", conn); 

    cmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username; 
    cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName; 

    MembershipUser u = null; 
    OdbcDataReader reader = null; 

    try 
    { 
    conn.Open(); 

    reader = cmd.ExecuteReader(); 

    if (reader.HasRows) 
    { 
     reader.Read(); 
     u = GetUserFromReader(reader); 

     if (userIsOnline) 
     { 
     OdbcCommand updateCmd = new OdbcCommand("UPDATE Users " + 
        "SET LastActivityDate = ? " + 
        "WHERE Username = ? AND Applicationname = ?", conn); 

     updateCmd.Parameters.Add("@LastActivityDate", OdbcType.DateTime).Value = DateTime.Now; 
     updateCmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username; 
     updateCmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName; 

     updateCmd.ExecuteNonQuery(); 
     } 
    } 

    } 
    catch (OdbcException e) 
    { 
    if (WriteExceptionsToEventLog) 
    { 
     WriteToEventLog(e, "GetUser(String, Boolean)"); 

     throw new ProviderException(exceptionMessage); 
    } 
    else 
    { 
     throw e; 
    } 
    } 
    finally 
    { 
    if (reader != null) { reader.Close(); } 

    conn.Close(); 
    } 

    return u;  
} 

자세한 내용은 설명서를 참조하십시오 : Implementing a Membership Provider

Sample Code for Creating Custom Membership Provider

관련 문제