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

时间:2015-01-06 12:18:48

标签: c# asp.net-mvc asp.net-membership login-control

我想在我的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" } } } };
}

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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框架抽象类MembershipProvider - &gt; ValidateUser(抽象方法),其实现位于SqlMembershipProvider中 - &gt;您在web.config文件中配置的ValidateUser方法[如上所述]。在该方法中,它只调用数据库的两个存储过程,第一个是aspnet_Membership_GetPasswordWithFormat,它检查您的应用程序名称,用户名,上次登录活动日期和当前时间,以及基于它使您进行身份验证,然后调用其他存储过程名称为aspnet_Membership_UpdateUserInfo,这是自解释的,因为您意识到使用islockedout,lastlockoutdate,failedpasswordattemptcount等等列更新aspnet_membership表。

希望这会对你有所帮助。