Membership.ValidateUser 方法如何访问数据库?

How does Membership.ValidateUser method access a database?

我想在我的 MVC 项目开始时构建一个会员系统,我使用 Membership.ValidateUser 方法来验证凭据。但是我不明白这种方法如何访问我的数据库并检查我的电子邮件和密码信息。

[HttpPost]
[ActionName("Login")]
public ActionResult Login(LoginModel loginModel)
{
        if (Membership.ValidateUser(loginModel.Email, loginModel.Password))
        {
            FormsAuthentication.SetAuthCookie(loginModel.Email, true);
            return Json(true);
        }

        return new JsonNetResult() 
        { Data = new { Error = true, Messages = new[] { new { Message = "Wrong username or password" } } } };
}

它使用您的 Web.config 文件中指定的 MembershipProvider 来验证用户。默认情况下,它使用 DefaultMembershipProvider

Membership.ValidateUser 方法首先检查 web.config 文件中的成员资格 defaultProvider 是否与您提供的名称匹配,如下所示:

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
      <providers>
        <clear />
        <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" 
         connectionStringName="Context" applicationName="myapp" 
         enablePasswordRetrieval="false" enablePasswordReset="true" 
         requiresQuestionAndAnswer="false" requiresUniqueEmail="true" 
         passwordFormat="Hashed" minRequiredPasswordLength="7" 
         minRequiredNonalphanumericCharacters="0" />
      </providers>
    </membership>

以上配置将调用 .net 框架抽象 class MembershipProvider -> ValidateUser(抽象方法),其实现位于您在 web.config 文件中配置的 SqlMembershipProvider -> ValidateUser 方法中[如上].在那个方法中,它只是调用你的数据库的两个存储过程,第一个是 aspnet_Membership_GetPasswordWithFormat 检查你的应用程序名称、用户名、上次登录 activity 日期和当前时间,并基于它让你进行身份验证和其次调用名称为 aspnet_Membership_UpdateUserInfo 的其他存储过程,当您意识到哪个更新 aspnet_membership table 具有诸如 islockedout、lastlockoutdate、failedpasswordattemptcount.. 等列时,这是不言自明的

希望对您有所帮助。