.net – 是否必须在自定义实现中覆盖默认的成员资格提供程序的OnValidatingPassword?
|
我正在为我的.net应用程序实现自定义成员资格提供程序.我已经设置了最少数量的字符和非字母数字字符的配置,但它似乎无论如何都要通过密码,即使它们违反了规则. OnValidatingPassword是一种虚方法. example from Microsoft不会覆盖该方法. 这个question也遇到了同样的问题,但是作者放弃了对他的问题的回答并简单地覆盖了这个功能.这个answer states没有必要覆盖它的功能. 基本功能没有做任何事情吗?当我重写OnValidatePassword,并简单地调用基类时,我的函数被命中,但它永远不会拒绝我太简单的密码. 代码示例(使用自定义CreateUser函数) protected override void OnValidatingPassword(ValidatePasswordEventArgs e)
{
base.OnValidatingPassword(e);
}
//
// MembershipProvider.CreateUser
//
public MembershipUser CreateUser(string username,string password,string globalIdentifier,string firstName,string lastName,string birthDate,object providerUserKey,out MembershipCreateStatus status)
{
ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(username,password,true);
OnValidatingPassword(args);
if (args.Cancel)
{
status = MembershipCreateStatus.InvalidPassword;
return null;
}
解决方法MembershipProvider.OnValidatingPassword的文档仅声明如果处理程序已注册,它会引发ValidatingPassword事件,而不是它实际验证密码.查看Reflector中的方法证实了这一点: protected virtual void OnValidatingPassword(ValidatePasswordEventArgs e)
{
if (this._EventHandler != null)
{
this._EventHandler(this,e);
}
}
这很令人困惑,但我相信这意味着这为外部逻辑提供了一个参与密码验证的钩子;自定义提供程序仍需要编写自己的验证逻辑. 如果您查看SQL成员资格提供程序的源代码(下载Provider Toolkit Samples),您将看到它包含验证密码的逻辑,并且还调用OnValidatingPassword.以下代码来自CreateUser方法: if( password.Length < MinRequiredPasswordLength )
{
status = MembershipCreateStatus.InvalidPassword;
return null;
}
int count = 0;
for( int i = 0; i < password.Length; i++ )
{
if( !char.IsLetterOrDigit( password,i ) )
{
count++;
}
}
if( count < MinRequiredNonAlphanumericCharacters )
{
status = MembershipCreateStatus.InvalidPassword;
return null;
}
if( PasswordStrengthRegularExpression.Length > 0 )
{
if( !Regex.IsMatch( password,PasswordStrengthRegularExpression ) )
{
status = MembershipCreateStatus.InvalidPassword;
return null;
}
}
ValidatePasswordEventArgs e = new ValidatePasswordEventArgs( username,true );
OnValidatingPassword( e );
if( e.Cancel )
{
status = MembershipCreateStatus.InvalidPassword;
return null;
}
编辑 我认为部分混淆是基于OnValidatingPassword的名称,并且它似乎暗示它正在处理密码验证,而不是引发事件让其他代码验证密码.对于它的价值,我理解了这种混淆 – 如果该方法被命名为RaiseValidatingPasswordEvent,它可能会更清楚. 在任何情况下,您都可以查看.NET 4的Event Design指南.大约在页面的中间位置,您会发现:
(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 使用ASP.Net和JSON格式化实现jQuery的jgGrid
- asp.net-mvc-3 – 当HTTP响应状态设置为400时,IIS覆盖HTTP响
- asp.net-mvc-3 – 如何挂钩错误的jQuery验证不引人注目的MV
- asp.net – Web.config加密错误
- 在asp.net中输入密钥发出错误按钮
- asp.net-mvc-3 – 在ASP.NET MVC 3视图中渲染System.Drawin
- asp.net-mvc – 如何通过Resharper 8.2.1停止INCORRECT_TYP
- asp.net-mvc – ASP.NET MVC中的动态网站地图
- 如何为ASP.NET_SessionId cookie设置HttpOnly?
- .net – SqlBulkCopy超时
- 在ASP.Net MVC中访问“应用程序”对象来存储应用
- asp.net-mvc – ASP.NET MVC路由:如何定义自定义
- asp.net – 无法安装Microsoft.AspNet.Razor 3.0
- asp.net-mvc-routing – ASP.NET MVC区域:如何隐
- asp.net-mvc – 如何在ASP.NET MVC部分视图中使用
- asp.net – 有没有办法以编程方式设置Elmah中的应
- asp.net-mvc – Unity使用参数将依赖项注入MVC过
- asp.net – 在没有完全回发的情况下,在AJAX更新面
- asp.net – 在.NET 4下编译时出现“具有相同密钥
- asp.net – Response.TrySkipIisCustomErrors不工
