【问题标题】:Change Password length in Membership API在 Membership API 中更改密码长度
【发布时间】:2013-02-06 04:10:02
【问题描述】:

我的RegisterModel 具有如下Password 属性:

 public class RegisterModel
 {  
    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 8)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }
 }

在注册视图中,我有这个:

<p class="message-info">
Passwords must be at least @Membership.MinRequiredPasswordLength characters long.
</p>

虽然,我已将RegisterModel 中的Password 中的MinimumLength 更改为8 字符,但在我的查看页面上仍然只显示6,如下面的屏幕截图所示:

如何更改Password的长度?

【问题讨论】:

  • 仅供参考:当前建议的答案(日期 2/6/13)不适用于 MVC 5...遗憾的是,我还不知道是什么。以为我会发布这个以防其他人来看。

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


【解决方案1】:

虽然您已在 RegisterModel 中更改它,但请注意,在您的 Register View 上,该值来自根据您的 Membership Provider 在您的 web.config 文件中配置的 Membership 类。

所以,请检查您的 web.config 文件。它有以下代码:

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

在这里也更改minRequiredPasswordLength = "8",它会为你工作。

如果您不想在 Membership Provider 中进行更改,那么您仍然可以通过为 MinPasswordLength 编写自己的自定义属性来执行此操作,如下所示:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter , AllowMultiple = false, Inherited = true)]
public sealed class MinRequiredPasswordLengthAttribute : ValidationAttribute, IClientValidatable
{                             
    private readonly int _minimumLength = Membership.MinRequiredPasswordLength;
    public override string FormatErrorMessage(string name)
    {
        return String.Format(CultureInfo.CurrentCulture, ErrorMessageString, name, _minimumLength);
    }    

    public override bool IsValid(object value)
    {                    
        string password = value.ToString();    
        return password.Length >= this._minimumLength; 
    } 
    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
    {       
        return new[]{ new ModelClientValidationStringLengthRule(FormatErrorMessage(metadata.GetDisplayName()), _minimumLength, int.MaxValue)
        };
    }
}

然后更新您的RegisterModel 以改用MinRequiredPasswordLength DataAnnotation。

[Required]        
[MinRequiredPasswordLength(ErrorMessage = "The {0} must be at least {1} character(s) long.")]           
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }

【讨论】:

  • 谢谢,很有帮助。
  • 所以它确实意味着它是直接从 web.config 调用成员资格,我们不能从 Registermodel 获取密码长度吗?
  • 仍然不明白为什么这两者在 MVC 中如此脱节:|
  • @TimBJames 即使您在代码中更改了它,您的 Membership 也会使用此字符串进行配置,因此它也应该与代码一起更改。一个人都不能帮助你...
猜你喜欢
  • 2013-11-12
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多