代码之家  ›  专栏  ›  技术社区  ›  Eugene Kulabuhov

更改没有提供程序的密码控件

  •  1
  • Eugene Kulabuhov  · 技术社区  · 14 年前

    有没有一种方法可以使changepassword控制在没有成员资格提供程序的情况下工作?与登录控制通过身份验证事件工作的方式相同,我可以让这个组件使用我的密码更改功能,然后在不编写自定义提供程序的情况下显示成功视图吗?

    谢谢, 尤金。

    编辑:

    为了澄清通过Reflector进行的一些研究,我得出结论,没有成员资格提供者,这个控件是完全无用的。每一个逻辑位,比如读取配置文件和验证用户输入,都是外包给提供者的,所以您也必须编写这个通用代码。

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

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

    最后两个仅在返回false时用于错误消息 ChangePassword 功能。

    1 回复  |  直到 14 年前
        1
  •  2
  •   pettys    14 年前

    通过Reflector查看.NET 3.5源,当Protected OnBubbleEvent检测到ChangePassword按钮事件时,它调用attemptChangePassword()。该方法的实现大致如下:

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

    看起来你可以:

    1. 向ChangingPassword事件添加处理程序
    2. 在该事件处理程序中,使用控件的用户名和newpassword属性来执行您自己的自定义工作。
    3. 成功后,请重定向到新的URL或在事件参数上设置取消标志,并手动隐藏ChangePassword控件。似乎没有一种简单的方法可以将SuccessView与此技术结合使用。

    所以看起来有点可能,但是控件的设计绝对没有考虑到这种使用——它与成员资格提供者的连接非常好。