Member.ValidateUser 方法如何访问数据库

本文关键字:访问 数据库 何访问 ValidateUser 方法 Member | 更新日期: 2023-09-27 18:36:20

我想在我的MVC项目开始时建立一个会员系统,我使用Member.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" } } } };
}

Member.ValidateUser 方法如何访问数据库

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

Member.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框架抽象类MemberProvider -> ValidateUser(抽象方法),其实现位于您在web.config文件中配置的SqlMemberProvider -> ValidateUser方法[如上所述]。在该方法中,它只是简单地调用数据库的两个存储过程,第一个是aspnet_Membership_GetPasswordWithFormat,它检查您的应用程序名称,用户名,上次登录活动日期和当前时间,并在此基础上进行身份验证,其次调用其他存储过程,该名称aspnet_Membership_UpdateUserInfo这是不言自明的,因为您意识到哪个更新aspnet_membership表,其中包含islockedout等列, 最后锁定日期,失败密码尝试计数..等。

希望这对你有帮助。

若要根据成员资格框架验证用户,请使用成员资格类的 ValidateUser 方法。ValidateUser 方法接受两个输入参数(用户名和密码),并返回一个布尔值,指示凭据是否有效。与我们在上一教程中检查的 CreateUser 方法一样,ValidateUser 方法将实际验证委托给配置的成员资格提供程序。

SqlMembership 提供程序通过aspnet_Membership_GetPasswordWithFormat存储过程获取指定用户的密码来验证提供的凭据。回想一下,SqlMemberProvider 使用以下三种格式之一存储用户的密码:清除、加密或哈希。aspnet_Membership_GetPasswordWithFormat存储过程以原始格式返回密码。对于加密或哈希密码,SqlMembership 提供程序将传递到 ValidateUser 方法的密码值转换为其等效的加密或哈希状态,然后将其与从数据库返回的密码值进行比较。如果存储在数据库中的密码与用户输入的格式化密码匹配,则凭据有效。

来源: https://learn.microsoft.com/en-us/aspnet/web-forms/overview/older-versions-security/membership/validating-user-credentials-against-the-membership-user-store-cs