2013-04-24 54 views
0

我需要继承“会员级别”。以便我可以通过登录控制和数据库“员工”验证用户。另外,我必须使用创建用户向导创建新用户,并且必须将详细信息存储在“员工”数据库中。为此,我必须在成员资格类中实施CREATE_USER()方法。但CREATE_USER()方法的返回类型是会员用户如何从Membership类返回?

如果是返回类型,该方法返回什么?

回答

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