2010-03-17 117 views
1

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

谢谢, 尤金。

编辑:

只是为了澄清一些研究,通过反射后,我来到了结论,这种控制没有的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。

回答

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. 在该事件处理程序使用控制的用户名和新密码性质做你自己的定制工作。
  3. 成功时重定向到新的URL或设置事件参数的取消标志并手动隐藏ChangePassword控件。用这种技术似乎没有一种简单的方法来使用SuccessView。

因此,它看起来有点可能,但控件绝对没有设计考虑到这种用法 - 它很好地连接到MembershipProvider。

+0

谢谢。对于迟到的回复感到抱歉。你的回答让我更深入地研究这个问题。 – 2010-03-21 18:42:59

相关问题