【问题标题】:How to return from Membership class?如何从会员课程返回?
【发布时间】:2013-04-24 06:49:44
【问题描述】:

我需要继承“会员等级”。这样我就可以通过登录控件和数据库“员工”验证用户。此外,我必须使用创建用户向导创建新用户,并且详细信息必须存储在“员工”数据库中。为此,我必须在成员资格类中实现 CREATE_USER() 方法。但是CREATE_USER() 方法的返回类型是MembershipUser

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

【问题讨论】:

    标签: asp.net .net security


    【解决方案1】:

    参考:How to: Sample Membership Provider Implementation

    检查这个代码sn -p

    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(string, bool) //

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-04
      • 2020-07-24
      • 1970-01-01
      • 2012-02-20
      • 1970-01-01
      • 2021-01-27
      • 1970-01-01
      • 2021-08-24
      相关资源
      最近更新 更多