首页 > 解决方案 > 为什么(有时) Membership.ValidateUser 首先调用 PasswordFormat 以及如何?

问题描述

我在MVC机器上运行项目。我在网络配置中设置了自定义成员资格,例如:

<membership defaultProvider="CustomMembership">
  <providers>
    <clear/>
    <add name="CustomMembership" type="GotPayments.CustomAuthentication.CustomMembership"/>
  </providers>
</membership>

我已经实现了一些我需要的功能;对于其他人,我只是抛出了一个NotImplementedException,因为我不使用它。所以当我打电话给我实现的ValidateUser用户时,一切正常:

public override bool ValidateUser(string email, string password)
{
    if (string.IsNullOrEmpty(email) || string.IsNullOrEmpty(password))
    {
        return false;
    }

    using (MyProject ctx = new MyProject())
    {
        var user = (from us in ctx.Users
                    where string.Compare(email, us.Email, StringComparison.OrdinalIgnoreCase) == 0
                    && string.Compare(password, us.Password, StringComparison.OrdinalIgnoreCase) == 0
                    && us.IsActive == true
                    select us).FirstOrDefault();

        return (user != null) ? true : false;
    }
}   

但是,一旦我将项目复制到另一台机器上并运行它,相同的功能(在执行之前;所以 F11 调试时不要进入 to ValidateUser)调用这个:

public override MembershipPasswordFormat PasswordFormat
{
    get
    {
        throw new NotImplementedException();
    }
}

抛出异常。

为什么它只称它为“有时”?以及框架如何称呼它?我自己从不调用那个函数。

堆栈跟踪:

in System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)  
in System.Environment.get_StackTrace() 
in MyProject.CustomAuthentication.CustomMembership.get_PasswordFormat() in CustomMembership.cs:riga 117
in System.Web.Security.Membership.CheckedPasswordFormat(MembershipProviderCollection providers)
in System.Web.Security.Membership.Initialize()
in System.Web.Security.Membership.get_Provider()
in System.Web.Security.Membership.ValidateUser(String username, String password)
in MyProject.Controllers.AccountController.Login(LoginViewModel loginView) in AccountController.cs:riga 27

登录.cs

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginViewModel loginView)
{
    if (ModelState.IsValid)
    {
        if (Membership.ValidateUser(loginView.Email, loginView.Password))
        {
            // ...
        }
    }

    // ...
}

标签: c#.netasp.net-membership

解决方案


推荐阅读