我们已经实现了一个自定义成员资格提供者,对使用该供应商的网页更改密码控制。此成员资格提供程序类中的ChangePassword方法通过连接到外部Web服务来检查有关密码强度和有效性的一些业务逻辑。如果有新的密码(长度问题,需要特殊字符等),web服务有能力返回新密码的错误。现在成员资格提供ChangePassword方法返回类型问题
,是要通过自定义提供被覆盖的ChangePassword方法的签名是:
public override bool ChangePassword(string username, string oldPassword, string newPassword)
所以即使我知道用新密码确切的问题的用户提供,我不能够将其显示在网页上,因为我只能从此方法返回true或false,并且更改密码控制会根据布尔返回值接管并执行自己的魔术。我可以挂钩的OnChangePasswordError
事件ChangePassword
控制的显示静态的错误信息,或者我甚至可以安装时出现此控制一些硬编码字符串的FailureText
属性是一个错误,但我无法提供给用户什么他们提供的密码确实是错误的。
protected void OnPasswordChangeError(object sender, EventArgs e)
{
throw new MembershipPasswordException("Tell user what exactly is wrong with the password they supplied");
}
的MembershipProvider
类有一个ValidatingPassword
事件之前,密码被更改时引发的,我可以通过检查密码是否符合标准,在这里抛出一个异常,但仍然是例外,似乎并没有传递到ChangePassword控件。下面是ValidatingPassword事件处理程序的代码:
void MyMembershipProvider_ValidatingPassword(object sender, ValidatePasswordEventArgs e)
{
//if password not valid
e.Cancel = true;
e.FailureInformation = new MembershipPasswordException();
e.FailureInformation;
}
如何从成员资格提供类ChangePassword控件的ChangePassword方法发送的特定信息,以显示正确的,非静态/硬编码口令更改错误消息给用户?有没有一种方法可以将ValidatePasswordEventArgs连接到EventHandler中的OnChangePassword方法的EventArgs,以便我可以在ChangePassword控件中获取FailureInformation?
从我最初研究这似乎并不可能。虽然我觉得MS团队不会忽略这一点,但应该有办法。
几个要点:
MembershipUser.ChangePassword fails without warning http://forums.asp.net/t/983613.aspx
哦,我的眼睛!这个称号正在燃烧他们!请放一点儿。 – 2009-12-29 22:20:08
非常感谢! – 2009-12-29 22:27:49
我不会放弃它,但我认为你需要想出一个像写入数据库或其他东西的黑客。 – Greg 2010-01-29 22:01:48