自定义ASPNetMembership FailureInformation总是为空,OnValidatingPassword问题

 2023-02-17    386  

问题描述

如此说明 http://msdn .microsoft.com/en-US/Library/System.Web.Security.Membershipprovider.OnValidationPassword.aspx

“当validationPassword事件已完成时,可以检查提供为E参数作为E参数的ValidatePasswordEventargs对象的属性以确定是否应该被抛出当前操作,如果是存储在失败信息属性中的特定异常,则应被抛出. “

自定义ASPNetMembership FailureInformation总是为空,OnValidatingPassword问题

这里是一些细节/代码,它真正显示了为什么失败形象可能为null http://论坛. ASP.NET/t/991002.aspx

根据我的会员设置,我应该出现一个例外,密码与密码安全条件不匹配,但不会发生.

然后我确实尝试调试system.web.applicationservices.dll(在这里,在这里位于.NET 4.0 System.Web.Security)框架代码,看看真的发生了什么,但我不能进入这个程序集,可能是因为这个[TypeForwardedFrom(“System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a”)]
public abstract class MembershipProvider : ProviderBase

很容易我可以进入任何另一个.NET 4.0汇编,但在此之上.我确实检查了system.web.applicationservices.dll的符号.

现在我只有一个想法如何修复它 – 覆盖方法onvalidatingpassword(validatepasswordeventargs e).

那是我的故事.

可能是一些可能有帮助:

1)任何想法为什么onvalidatingpassword不起作用?

2)任何想法如何进入它?

推荐答案

已读取此 http://forums.asp.net/t/991002. aspx 再一次.这是我的解决方案

//Override OnValidatingPassword
    protected override void OnValidatingPassword(ValidatePasswordEventArgs args)
    {
        //Any logic to process password validation conditions
        //e.g:
        if (args.Password.Length < MinRequiredPasswordLength)
            args.FailureInformation = new ArgumentException(String.Format("Password is too short, min password length {0}", MinRequiredPasswordLength.ToString()));

        if (args.UserName == args.Password)
            args.FailureInformation = new ArgumentException(String.Format("Password should not be equal to username"));

        //Also here could be any logic to throw an exception if needed
        //e.g:
        if (args.FailureInformation != null)
            throw args.FailureInformation;

        //Calling base
        base.OnValidatingPassword(args);

        if (args.Cancel)
        {
            if (args.FailureInformation == null)
                args.FailureInformation = new ArgumentException(String.Format("Custom Password Validation Failure for password '{0}'", args.Password));

            throw args.FailureInformation;
        }
    }

其他推荐答案

您不必覆盖onvalidationPassword方法,但由于文档表示您需要处理validationPassword事件.检查 membershipvalidatePlayHeventHandler .

使用.NET反射器并检查SQLMembershipProvider类的ChangePassword方法.您将看到SQLMembershipProvider没有任何对validationPassword事件注册的处理程序.

所以我认为的是在您的自定义会员提供者的oninit中,您注册成员资格.ValidationPassword以及您进行编码的处理程序.上面链接中的示例示例.

希望我不会误解你的问题.

其他推荐答案

您的问题似乎表明您正在使用自定义会员提供商?所以我假设你直接影响成员文件前提?

class MyMembershipProvider : MembershipProvider{…}

在这种情况下,OnValidationPassword永远不会自动调用…您必须自己调用它.

所以,基本上我很困惑.你能澄清你的设置吗?您是否使用默认会员提供商或自定义?如果自定义,您从中继承哪个类?

为查看代码,您可以使用反射器进行.

以上所述是小编给大家介绍的自定义ASPNetMembership FailureInformation总是为空,OnValidatingPassword问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/34128.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。