如何覆盖createUser()会员方法以在密码检查失败时显示自定义错误消息?
我使用了网站管理工具,它提供了一个类似向导的界面来创建新用户。 (要启动此工具,请单击Microsoft Visual Studio中“网站”菜单上的“ASP.NET配置”)
Web.Config文件:
<membership defaultProvider="MyMembershipProvider">
<providers>
<clear />
<add name="MyMembershipProvider" type="BlueDDApp.Controllers.MyMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" 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>
自定义会员类::
public class MyMembershipProvider : SqlMembershipProvider
{
public MyMembershipProvider()
{
//Membership.ValidatingPassword += new MembershipValidatePasswordEventHandler(OnValidatePassword);
ValidatingPassword += ValidatePassword;
}
/* public override MembershipUser CreateUser( string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
{
ValidatingPassword += ValidatePassword;
return base.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status);
}*/
void ValidatePassword(object sender, ValidatePasswordEventArgs e)
{
Regex check = new Regex("^(?i)(?!.*" + e.UserName + ").*$");
if (!check.IsMatch(e.Password))
{
e.FailureInformation = new HttpException("blah blah");
e.Cancel = true;
}
}
}
答案 0 :(得分:0)
如果您使用的是asp:CreateUserWizard控件,我认为它是(它将从您的web.config连接到成员资格提供程序),然后:
在设计模式下,如果单击此控件,则在右上角有一个图标,一个箭头,您可以在其中选择“自定义创建用户步骤”选项。这将转换控件,将其扩展为内部使用的单独控件。现在,您可以访问错误消息(Literal控件)并将其更改为显示静态消息,或显示来自代码的动态更改消息。
您还可以向CreateUserWizard添加事件,如CreatingUser,CreateUserError和CreatedUser,它们可以让您自定义行为以及如何使用创建。
答案 1 :(得分:0)
以下是有关自定义MembershipUser的一个很好的示例: