Почему (иногда) Membership.ValidateUser сначала вызывает PasswordFormat и как? - PullRequest
0 голосов
/ 22 мая 2018

Я запускаю 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во время отладки не входите в ValidateUser), вызовите это:

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

, который выдает исключение.

Почему он вызывает его только "иногда"?И как это называют рамки?Я никогда не называю эту функцию сам.

StackTrace:

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

Login.cs

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

    // ...
}
...