ASP.NET Membership.ValidateUser() 总是返回“false”

6

这是我的web.config文件:

<membership defaultProvider="CustomizedMembershipProvider">
  <providers>
    <clear />
    <add name="CustomizedMembershipProvider" 
         connectionStringName="MYbdName" 
         applicationName="/" type="System.Web.Security.SqlMembershipProvider" 
         requiresQuestionAndAnswer="false" 
         passwordFormat="Clear" 
         enablePasswordRetrieval="true" 
         requiresUniqueEmail="true" 
         minRequiredPasswordLength="4" 
         minRequiredNonalphanumericCharacters="0" />
  </providers>
</membership>

我甚至硬编码了用户名和密码:

 bool b = Membership.ValidateUser("user@mail.com", "pass123");

当我在数据库上执行 select 操作时,我获取了正确的用户。

用户已批准 = true

用户已锁定 = 0

2个回答

10

在配置ASP.NET 2.0 Membership和其他提供程序时,您需要设置applicationName属性。在您的web.config文件中缺少此属性:

<membership defaultProvider="CustomizedMembershipProvider">
  <providers>
    <clear />
    <add name="CustomizedMembershipProvider" 
         connectionStringName="MYbdName" 
         applicationName="/"   <----------   Missing applicationName
         type="System.Web.Security.SqlMembershipProvider" 
         requiresQuestionAndAnswer="false" 
         passwordFormat="Clear" 
         enablePasswordRetrieval="true" 
         requiresUniqueEmail="true" 
         minRequiredPasswordLength="4" 
         minRequiredNonalphanumericCharacters="0" /> 
  </providers>
</membership>

您可以在此处尝试获取值。
public bool Login(string userName, string password)
{
    var provider = Membership.Provider;
    string name = provider.ApplicationName; // Get the application name here

    return Membership.ValidateUser(userName, password);
}

或者打开ASPNETDB数据库中的aspnet_Users和aspnet_Applications表,找出在开发过程中创建用户和其他数据时使用的应用程序名称(在aspnet_Application表中查找),然后正确设置web.config属性:
<membership defaultProvider="CustomizedMembershipProvider">
      <providers>
        <clear />
        <add name="CustomizedMembershipProvider" 
             connectionStringName="MYbdName" 
             applicationName="MyAppName"   <----------   correct
             type="System.Web.Security.SqlMembershipProvider" 
             requiresQuestionAndAnswer="false" 
             passwordFormat="Clear" 
             enablePasswordRetrieval="true" 
             requiresUniqueEmail="true" 
             minRequiredPasswordLength="4" 
             minRequiredNonalphanumericCharacters="0" /> 
      </providers>
    </membership>

想要了解更多细节,阅读Scott-Gu博客中的文章


该文章涉及到IT技术相关内容,建议您认真阅读。

1

对于其他遇到此问题的人,请确保在创建/保存用户密码时跨项目使用相同的机器密钥:

<machineKey validationKey="x" decryptionKey="x" validation="SHA1" decryption="AES" />

更多信息请查看: https://msdn.microsoft.com/zh-cn/library/ff649308.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接