【问题标题】:How does Membership.ValidateUser method access a database?Membership.ValidateUser 方法如何访问数据库?
【发布时间】:2015-01-06 12:18:48
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 它如何获得我用来保存我的凭据的数据库或表
    • 您的数据存储在您的连接字符串中定义,该连接字符串在您的注释中的代码中由 connectionStringName="MembershipDb" 引用,因此它使用您在 web.config 中定义的连接字符串中的数据库命名为 MembershipDb
    【解决方案2】:

    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 -> ValidateUser(抽象方法),其实现位于您在 web.config 文件中配置的 SqlMembershipProvider -> ValidateUser 方法[如上]。在该方法中,它只需调用您的数据库的两个存储过程,第一个是 aspnet_Membership_GetPasswordWithFormat,它检查您的应用程序名称、用户名、上次登录活动日期和当前时间,并在此基础上进行身份验证,然后调用名称为 aspnet_Membership_UpdateUserInfo 的其他存储过程,这是不言自明的使用 islockedout、lastlockoutdate、failedpasswordattemptcount.. 等列实现更新 aspnet_membership 表。

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 2020-09-23
      • 2017-07-03
      相关资源
      最近更新 更多