2011-03-22 19 views
3

我總是得到結果invalidpassword。我總是通過所有用戶Password="mypassword"。這是默認MembershipCreateStatus.InvalidPassword如果我傳遞簡單字

Membership.CreateUser(Constitid, Password, Email, question, Status, true, out result); 

在web.config文件:

<add name="AspNetSqlMembershipProvider" 
    type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
    connectionStringName="LocalSqlServer" 
    enablePasswordRetrieval="false" 
    enablePasswordReset="true" 
    requiresQuestionAndAnswer="true" 
    applicationName="/" 
    requiresUniqueEmail="false" 
    passwordFormat="Hashed" 
    maxInvalidPasswordAttempts="5" 
    minRequiredPasswordLength="7" 
    minRequiredNonalphanumericCharacters="0" 
    passwordAttemptWindow="10" 
    passwordStrengthRegularExpression="" /> 

傳遞簡單的密碼將無法正常工作?如何解決這個問題?

+0

您是否嘗試過一個複雜的密碼?它工作嗎? – User 2011-03-22 22:58:28

回答

5

拆卸的SqlMembershipProvider後,它會拋出InvalidPassword在下列情況下 - 標有**

我的猜測 - 檢查您是否覆蓋MembershipProvider.ValidatingPassword事件

public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status) 
{ 
    string str3; 
    MembershipUser user; 
    if (!SecUtility.ValidateParameter(ref password, true, true, false, 0x80)) 
    { 
     status = **MembershipCreateStatus.InvalidPassword**; 
     return null; 
    } 
    string salt = this.GenerateSalt(); 
    string objValue = this.EncodePassword(password, (int) this._PasswordFormat, salt); 
    if (objValue.Length > 0x80) 
    { 
     status = **MembershipCreateStatus.InvalidPassword**; 
     return null; 
    } 
    if (passwordAnswer != null) 
    { 
     passwordAnswer = passwordAnswer.Trim(); 
    } 
    if (!string.IsNullOrEmpty(passwordAnswer)) 
    { 
     if (passwordAnswer.Length > 0x80) 
     { 
      status = MembershipCreateStatus.InvalidAnswer; 
      return null; 
     } 
     str3 = this.EncodePassword(passwordAnswer.ToLower(CultureInfo.InvariantCulture), (int) this._PasswordFormat, salt); 
    } 
    else 
    { 
     str3 = passwordAnswer; 
    } 
    if (!SecUtility.ValidateParameter(ref str3, this.RequiresQuestionAndAnswer, true, false, 0x80)) 
    { 
     status = MembershipCreateStatus.InvalidAnswer; 
     return null; 
    } 
    if (!SecUtility.ValidateParameter(ref username, true, true, true, 0x100)) 
    { 
     status = MembershipCreateStatus.InvalidUserName; 
     return null; 
    } 
    if (!SecUtility.ValidateParameter(ref email, this.RequiresUniqueEmail, this.RequiresUniqueEmail, false, 0x100)) 
    { 
     status = MembershipCreateStatus.InvalidEmail; 
     return null; 
    } 
    if (!SecUtility.ValidateParameter(ref passwordQuestion, this.RequiresQuestionAndAnswer, true, false, 0x100)) 
    { 
     status = MembershipCreateStatus.InvalidQuestion; 
     return null; 
    } 
    if ((providerUserKey != null) && !(providerUserKey is Guid)) 
    { 
     status = MembershipCreateStatus.InvalidProviderUserKey; 
     return null; 
    } 
    if (password.Length < this.MinRequiredPasswordLength) 
    { 
     status = **MembershipCreateStatus.InvalidPassword**; 
     return null; 
    } 
    int num = 0; 
    for (int i = 0; i < password.Length; i++) 
    { 
     if (!char.IsLetterOrDigit(password, i)) 
     { 
      num++; 
     } 
    } 
    if (num < this.MinRequiredNonAlphanumericCharacters) 
    { 
     status = **MembershipCreateStatus.InvalidPassword**; 
     return null; 
    } 
    if ((this.PasswordStrengthRegularExpression.Length > 0) && !Regex.IsMatch(password, this.PasswordStrengthRegularExpression)) 
    { 
     status = **MembershipCreateStatus.InvalidPassword**; 
     return null; 
    } 
    ValidatePasswordEventArgs e = new ValidatePasswordEventArgs(username, password, true); 
    this.OnValidatingPassword(e); 
    if (e.Cancel) 
    { 
     status = **MembershipCreateStatus.InvalidPassword**; 
     return null; 
    } 
    try 
    { 
     SqlConnectionHolder connection = null; 
     try 
     { 
      connection = SqlConnectionHelper.GetConnection(this._sqlConnectionString, true); 
      this.CheckSchemaVersion(connection.Connection); 
      DateTime time = this.RoundToSeconds(DateTime.UtcNow); 
      SqlCommand command = new SqlCommand("dbo.aspnet_Membership_CreateUser", .... 

      command.Parameters.Add(parameter); 
      try 
      { 
       command.ExecuteNonQuery(); 
      } 
      catch (SqlException exception) 
      { 
       if (((exception.Number != 0xa43) && (exception.Number != 0xa29)) && (exception.Number != 0x9d0)) 
       { 
        throw; 
       } 
       status = MembershipCreateStatus.DuplicateUserName; 
       return null; 
      } 
      int num3 = (parameter.Value != null) ? ((int) parameter.Value) : -1; 
      if ((num3 < 0) || (num3 > 11)) 
      { 
       num3 = 11; 
      } 
      status = (MembershipCreateStatus) num3; 
      if (num3 != 0) 
      { 
       return null; 
      } 
      providerUserKey = new Guid(command.Parameters["@UserId"].Value.ToString()); 
      time = time.ToLocalTime(); 
      user = new MembershipUser(this.Name, username, providerUserKey, email, passwordQuestion, null, isApproved, false, time, time, time, time, new DateTime(0x6da, 1, 1)); 
     } 
     finally 
     { 
      if (connection != null) 
      { 
       connection.Close(); 
       connection = null; 
      } 
     } 
    } 
    catch 
    { 
     throw; 
    } 
    return user; 
} 


internal static bool ValidateParameter(ref string param, bool checkForNull, bool checkIfEmpty, bool checkForCommas, int maxSize) 
{ 
    if (param == null) 
    { 
     return !checkForNull; 
    } 
    param = param.Trim(); 
    return (((!checkIfEmpty || (param.Length >= 1)) && ((maxSize <= 0) || (param.Length <= maxSize))) && (!checkForCommas || !param.Contains(","))); 
} 
+0

爲了完整性,''password'到'ValidateParameter'後的四個參數分別對應:'checkForNull','checkIfEmpty','checkForCommas'('false'),'maxSize'(128)。 – user7116 2011-03-23 20:58:56

+0

謝謝。對我來說,它是「num 2017-02-21 00:56:01