MembershipProvider的密码验证器?

时间:2010-11-23 11:39:44

标签: c# asp.net validation membership-provider

我想验证用于在asp.net(.net 3.5)中创建/更新用户的密码字段。密码将用于MembershipProvider

实现此目的的最佳方法是什么,以便验证将使用成员资格提供程序的配置设置?当然我可以编写代码,但这似乎是一个非常重要的东西,必须有一个简单的方法来做它。

[edit]澄清这是新用户或更改密码的密码字段,因此ValidateUser无效。

3 个答案:

答案 0 :(得分:2)

我会说答案是否定的,基于SqlMembershipProvider未在其ChangePasswordCreateUser方法中调用密码验证方法的事实。使用Reflector,您可以看到它在两种方法中都运行相同的检查集(参见下文)。所以我要说你正在做的就是自己编写函数。

if (newPassword.Length < this.MinRequiredPasswordLength)
{
    throw new ArgumentException(SR.GetString("Password_too_short", new object[] { "newPassword", this.MinRequiredPasswordLength.ToString(CultureInfo.InvariantCulture) }));
}
int num3 = 0;
for (int i = 0; i < newPassword.Length; i++)
{
    if (!char.IsLetterOrDigit(newPassword, i))
    {
        num3++;
    }
}
if (num3 < this.MinRequiredNonAlphanumericCharacters)
{
    throw new ArgumentException(SR.GetString("Password_need_more_non_alpha_numeric_chars", new object[] { "newPassword", this.MinRequiredNonAlphanumericCharacters.ToString(CultureInfo.InvariantCulture) }));
}
if ((this.PasswordStrengthRegularExpression.Length > 0) && !Regex.IsMatch(newPassword, this.PasswordStrengthRegularExpression))
{
    throw new ArgumentException(SR.GetString("Password_does_not_match_regular_expression", new object[] { "newPassword" }));
}

答案 1 :(得分:0)

滚动您自己的提供程序,继承自内置的提供程序:

public class SqlMembershipProvider : System.Web.Security.SqlMembershipProvider
{
    // called on login attempt
    public override bool ValidateUser(string userName, string password)
    {
        // do your logic

        // use built-in properties, parsed by base class for you, such as:
        if (password.Length < this.MinRequiredPasswordLength)
        {
        }

        //if ok, then:
        base.ValidateUser(userName, password);
    }

    // called on new user creation attempt
    public override MembershipUser CreateUser(string userName, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
    {
        // do your logic

        //if ok, then:
        base.CreateUser(...);
    }

答案 2 :(得分:0)

验证到底是什么意思?

有一种方法可以要求密码具有一定的长度,并使其复杂(即6个字母数字,6个非字母数字),但我无法访问有关该主题的笔记。

这将全部在应用程序本身的配置文件中完成。我不得不同意你需要使用自己的函数,没有理由不这样做,因为我认为你想扩展默认行为。

我做了一个快速的谷歌搜索,找到了我的想法,虽然我的笔记更深入。

<membership defaultProvider="SqlProvider"
  userIsOnlineTimeWindow = "20>
  <providers>
    <add
      name="SqlProvider"
      type="System.Web.Security.SqlMembershipProvider"
      connectionStringName="SqlServices"
      requiresQuestionAndAnswer="true"
      minRequiredPasswordLength="7"
      minRequiredNonalphanumericCharacters="1"
      />
  </providers>
</membership>

我应该清楚,除了之外还要做任何事情。“验证数据源中是否存在指定的用户名和密码。”您需要自己的提供商。

老实说,我不明白你不想使用自己的提供商的原因....