用户修改密码时,会判断密码强度,这时要调用web.config中的一段关于membership的配置
<membership defaultProvider="MySqlMembershipProvider">
<providers>
<clear/>
<add autogenerateschema="false"
connectionStringName="AppDBConnString"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
applicationName="CFH2008"
requiresUniqueEmail="true"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="20"
minRequiredPasswordLength="4"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
writeExceptionsToEventLog="false"
passwordStrengthRegularExpression=""
description="MySQL AB Membership Provider"
name="MySqlMembershipProvider"
type="MySql.Web.Security.MySqlMembershipProvider"/>
</providers>
</membership>
如果不满足条件,就会报错“密码错误或新密码无效。新密码的最短长度为4,其中必须包含以下非字母数字字符:0”。这里的4和0是读取的minRequiredPasswordLength和minRequiredNonalphanumericCharacters的配置,如果将他们修改,报错信息也会随之修改。也就是说:密码错误或新密码无效。新密码的最短长度为XXX,其中必须包含以下非字母数字字符:XXXX,这里的XXX是从配置里读取的。
我现在想做的是,将固定的字符修改为自定义的
比如,我想显示为“密码格式不正确,新的密码不得小于XX位,其中必须包含子字符XXX”,我应该怎么做?
求教各位老师,小弟先谢谢了。
自定义提示需要自己加label,读取web.config配置并显示到前端,示例后端C#代码:
protected void ChangePasswordBtn_Click(object sender, EventArgs e)
{
string oldPwd = OldPasswordTxt.Text.Trim();
string newPwd = NewPasswordTxt.Text.Trim();
string confirmPwd = ConfirmPasswordTxt.Text.Trim();
// 调用Membership API校验密码强度
bool isValid = Membership.ValidateUser(User.Identity.Name, oldPwd);
if (!isValid)
{
errorMsg = "旧密码输入错误,请重新输入!";
}
else if (newPwd != confirmPwd)
{
errorMsg = "新密码和确认密码不匹配,请重新输入!";
}
else if (newPwd.Length < Membership.Provider.MinRequiredPasswordLength)
{
errorMsg = string.Format("密码格式不正确,新的密码不得小于{0}位,其中必须包含以下特殊字符:@#$%",
Membership.Provider.MinRequiredPasswordLength);
}
else
{
try
{
// 修改密码
MembershipUser user = Membership.GetUser(User.Identity.Name, true);
if (user != null)
{
user.ChangePassword(oldPwd, newPwd);
errorMsg = "密码修改成功!";
}
else
{
errorMsg = "修改失败,用户不存在!";
}
}
catch (Exception ex)
{
errorMsg = ex.Message;
}
}
// 显示错误信息
ErrorMsgLabel.Text = errorMsg;
}
示例前端CSHTML代码:
<div class="form-group">
<label for="newPwd" class="control-label">新密码:</label>
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-lock"></i></span>
<input type="password" id="newPwd" name="newPwd" class="form-control" placeholder="请输入新密码" required
pattern="^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*[\W_\x7B-\xFF]).{6,16}$"
title="新密码必须包含至少一个大写字母、一个小写字母、一个数字和一个特殊字符(@#$_-),长度为6-16个字符,可输入的特殊字符范围是: !-,./:-@[-`{-~" />
</div>
</div>
<div class="form-group">
<label for="confirmPwd" class="control-label">确认密码:</label>
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-lock"></i></span>
<input type="password" id="confirmPwd" name="confirmPwd" class="form-control" placeholder="请再次输入新密码" required />
</div>
</div>
<div class="form-group">
<button type="submit" id="changePwdBtn" name="changePwdBtn" class="btn btn-primary btn-block"
onclientClick="return confirm('确定要修改密码吗?')">修改密码</button>
</div>
<div class="alert alert-danger" id="errorMsgLabel" runat="server" visible="false"><%# ErrorMsgLabel.Text %></div>
在上述代码中,使用了pattern属性对新密码进行正则验证,并且在验证不通过时使用errorMsg字符串进行输出,以便将自定义错误信息显示给用户。注意,在实际应用中需要根据具体需求对该示例代码进行必要的修改和适配。