没有提供者的ChangePassword控件

时间:2010-03-17 01:54:01

标签: asp.net asp.net-membership forms-authentication

有没有办法在没有会员提供者的情况下使ChangePassword控制工作?就像Login控件通过Authenticate事件一样,我可以让这个组件使用我的密码更改功能,然后在没有编写自定义提供程序的情况下显示成功视图吗?

谢谢, 尤金。

修改

通过Reflector进行一些研究后我得出的结论是,如果没有MembershipProvider,这个控件完全没用。每个逻辑位(如读取配置文件和验证用户输入)都外包给提供者,因此您还必须编写此通用代码。

这是足以使此控制工作的功能列表:

public bool ChangePassword(string username, string oldPassword, string newPassword) 
public MembershipUser GetUser(string username, bool userIsOnline)
public int MinRequiredNonAlphanumericCharacters { get; }
public int MinRequiredPasswordLength { get; }

如果从ChangePassword函数返回false,则后两个仅用于错误消息。

1 个答案:

答案 0 :(得分:2)

通过反射器查看.NET 3.5源代码,当受保护的OnBubbleEvent检测到ChangePassword按钮事件时,它调用AttemptChangePassword()。该方法的实现看起来大致如下:

private void AttemptChangePassword() {
    ...
    this.OnChangingPassword(loginCancelEventArgs);
    if(!e.Cancel) {
        MembershipProvider provider = LoginUtil.GetProvider(this.MembershipProvider);
        ...
}

看起来你可以:

  1. 为ChangingPassword事件添加处理程序
  2. 在该事件处理程序中,使用控件的UserName和NewPassword属性来执行您自己的自定义工作。
  3. 成功时,重定向到新URL或在事件参数上设置取消标记并手动隐藏ChangePassword控件。使用此技术似乎没有一种简单的方法来使用SuccessView。
  4. 所以它看起来有点可能,但是控件肯定不是为了这个用途而设计的 - 它很好地连接到MembershipProvider。