ASP .Net成员资格(控制是从config。窗口创建新用户的吗?)

时间:2012-01-10 05:21:02

标签: asp.net asp.net-mvc asp.net-membership

这是我的Web.config文件

<membership>
        <providers>
            <clear />
            <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="8"  minRequiredNonalphanumericCharacters="0" passwordStrengthRegularExpression="^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!%,.;:])|(?=.*[a-z])(?=.*[0-9])(?=.*[!%,.;:])|(?=.*[A-Z])(?=.*[0-9])(?=.*[!%,.;:])$" passwordAttemptWindow="10" applicationName="/" />
        </providers>
    </membership>


在这里,我想限制几个条件的新用户密码::


密码强度:

  1. 包含以下四个类别中的三个字符: 英文大写字母(A到Z)
    英文小写字母(a到z)
    基数为10位(0到9)
    非字母字符(例如,!,$,#,%)
    -
  2. 密码不包含用户的帐户名称

  3. 正如您所看到的,我在web.config部分中使用了passwordStrengthRegularExpression属性来匹配第一个条件(该成员资格提供)。
    需要解决方案才能达到第二个条件。


    简而言之 ::我需要自定义成员资格以匹配条件(强制执行字符复杂性。即:密码不包含用户的帐户名称)

    更新:: 我在申请时做了Eranga给我的建议。现在我还想在Membership createUser失败时显示相应的消息(在几个自定义条件下)。

2 个答案:

答案 0 :(得分:3)

您可以从默认提供程序中子类并处理ValidatingPassword事件。如果它不符合您的第二个标准,您可以取消验证。

public class MyMembershipProvider : SqlMembershipProvider 
{
    public MyMembershipProvider()
    {
        ValidatingPassword += ValidatePassword;
    }

    void ValidatePassword(object sender, ValidatePasswordEventArgs e)
    {
         if (e.Password.Contains(e.UserName))
         {
             e.Cancel = true;
             e.FailureInformation = new Exception("blah blah");
         }
    }
}

您的Web.Config文件应包含以下内容。请确保为type属性提供自定义成员资格类的全名。

   <membership>
        <providers>
            <clear />
            <add name="MyMembershipProvider" type="MyNamespace.MyMembershipProvider" connectionStringName="ApplicationServices" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="8"  minRequiredNonalphanumericCharacters="0" passwordStrengthRegularExpression="^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!%,.;:])|(?=.*[a-z])(?=.*[0-9])(?=.*[!%,.;:])|(?=.*[A-Z])(?=.*[0-9])(?=.*[!%,.;:])$" passwordAttemptWindow="10" applicationName="/" />
        </providers>
    </membership>

答案 1 :(得分:1)

这不是MVC,但您可以查看覆盖静态事件的this example。此外,由于这基本上是the same question you asked before,稍微详细一点,或许你可能刚刚更新了原始问题?

相关问题