SimpleMembershipProvider MinRequiredPasswordLength 始终返回 0,尽管它在 Web.config 成员资格提供程序部分中定义为 6

StackOverflow https://stackoverflow.com//questions/12702649

我切换到 SimpleMembershipProvider 在 ASP.NET MVC 4 应用程序中。其他一切都很好,但有一个问题......

当我尝试这段代码时:

var password = Membership.GeneratePassword(Membership.MinRequiredPasswordLength, 0);

MinRequiredPasswordLength 始终为 0。会员资格提供商中定义的设置 Web.config 部分未被阅读。

这是会员默认提供商 Web.config 部分:

<membership defaultProvider="AspNetSqlMembershipProvider">
    <providers>
         <clear />
             <add name="AspNetSqlMembershipProvider"
                  type="System.Web.Security.SqlMembershipProvider"
                  connectionStringName="DefaultConnection"
                  enablePasswordRetrieval="false"
                  enablePasswordReset="true"
                  requiresQuestionAndAnswer="false"
                  requiresUniqueEmail="false"
                  maxInvalidPasswordAttempts="5"
                  minRequiredPasswordLength="6"
                  minRequiredNonalphanumericCharacters="0"
                  passwordAttemptWindow="10"
                  applicationName="/Acad" />
    </providers>
</membership>

这是我得到的调试信息:

enter image description here

有什么提示吗?

是个 SimpleMembershipProvider 如此简单以至于它甚至不使用 Web.config 部分?

暂时的解决方案

为了克服 SimpleMembershipProvider 目前的限制,我用过 这段代码 获取定义在中的值 Web.config:

MembershipSection membershipSection = (MembershipSection)WebConfigurationManager.GetSection("system.web/membership");
var defaultProvider = membershipSection.DefaultProvider;
ProviderSettings providerSettings = membershipSection.Providers[defaultProvider];
var minRequiredPasswordLength = int.Parse(providerSettings.Parameters["minRequiredPasswordLength"]);
有帮助吗?

解决方案

我在 ASP.NET MVC 4 应用程序中切换到 SimpleMembershipProvider。

嗯,从您在 web.config 中显示的相关部分来看,情况似乎根本不是这样。您仍在使用 AspNetSqlMembershipProvider.

如果您想切换到 简单会员提供者 确保您已正确配置它:

<membership defaultProvider="SimpleMembershipProvider">
  <providers>
    <clear/>
    <add name="SimpleMembershipProvider"
         type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"
    />
  </providers>
</membership>

也就是说,SimpleMembershipProvider 不支持通过 web.config 设置这些属性。它甚至不使用它。如果您想要这样的功能,您必须自己实现。

其他提示

您可以继承自 SimpleMembershipProvider 并覆盖 MinRequiredPasswordLength:

public class YoursSimpleMembershipProvider : SimpleMembershipProvider
{
    private const int MIN_REQUIRED_PASSWORD_LENGTH = 6;

    private const int MIN_REQUIRED_NON_ALPHANUMERIC_CHARACTERS = 0;

    public override int MinRequiredPasswordLength
    {
        get
        {
            return MIN_REQUIRED_PASSWORD_LENGTH;
        }
    }
}

我发现如果我将 minRequiredPasswordLength="3" 放入 web.config 中,如下所示:

<membership defaultProvider="SimpleMembershipProvider" >
  <providers>
    <clear/>
    <add name="SimpleMembershipProvider" 
         type="WebMatrix.WebData.SimpleMembershipProvider,WebMatrix.WebData"
         minRequiredPasswordLength="3"
    />
  </providers>     
</membership>

那没有效果。我在MODEL中找到了秘密。如果你创建一个互联网应用程序模板,在AccountModels.cs中有一个“RegisterModel”,就像这样:

    public class RegisterModel
    {
        [Required]
        [Display(Name = "用户名")]
        public string UserName { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "{0} 必须至少包含 {2} 个字符。", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "密码")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "确认密码")]
        [Compare("Password", ErrorMessage = "密码和确认密码不匹配。")]
        public string ConfirmPassword { get; set; }
    }

在密码属性中有一个 StringLength->MinimumLength 。我认为是这样!

SimpleMembershipProvider 中删除了一些功能,请参见此处:http://sharifhkhan.com/programming/features-removed-in-simplemembershipprovider/

希望这对您有帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top