无需提供者的 ChangePassword 控制

发布于 2024-08-26 04:48:18 字数 647 浏览 5 评论 0原文

有没有办法让 ChangePassword 控件在没有会员提供商的情况下工作?就像登录控件通过身份验证事件工作一样,我是否可以使该组件使用我的密码更改功能,然后显示成功视图,而无需我编写自定义提供程序?

谢谢, 尤金.

编辑:

只是为了澄清,经过 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 时用于错误消息。

Is there a way to make ChangePassword control work without Membership provider? Like the same way Login control works through an Authenticate event, could I make this component to use my password changing function and then showing success view without me writing custom provider?

Thanks,
Eugene.

EDIT:

Just to clarify after some research through Reflector I came to conclusion that this control is totally useless without MembershipProvider. Every logic bit, like reading configuration file and validating user inputs is outsourced to providers, so you have to write this generic code as well.

This is the list of functions sufficient to make this control work:

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

The last two are only used for error message if you return false from ChangePassword function.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

婴鹅 2024-09-02 04:48:18

通过反射器查看 .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。

所以看起来这在某种程度上是可能的,但该控件在设计时绝对没有考虑到这种用途——它很好地硬连接到了 MembershipProvider。

Looking at the .NET 3.5 source through reflector, when the ChangePassword button event gets detected by protected OnBubbleEvent, it calls AttemptChangePassword(). The implementation of that method looks roughly like this:

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

It looks like you could:

  1. Add a handler to the ChangingPassword event
  2. In that event handler use the control's UserName and NewPassword properties to do your own custom work.
  3. On success either redirect to a new URL or set the cancel flag on the event args and hide the ChangePassword control manually. There does not appear to be an easy way to use the SuccessView with this technique.

So it looks like it's somewhat possible, but the control definitely wasn't designed with this use in mind -- it's pretty well hard-wired to MembershipProvider.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文