c# - ASP.NET Membership.ValidateUser() 总是返回 "false"

标签 c# asp.net membership-provider

<分区>

这是我的 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");

当我对数据库执行选择时,我得到了正确的用户。

用户 isAproved = true

用户已锁定 = 0

最佳答案

在配置 ASP.NET 2.0 Membership 和其他 Provider 时需要设置 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_Usersaspnet_Applications 表,找出在创建用户和其他信息时使用的应用程序名称开发期间的数据(查看 aspnet_Application 表以解决此问题)。

然后在你的 web.cofig 中正确设置属性:

<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>

有关更多详细信息,请阅读此 article来自 Scott-Gu 的博客。

关于c# - ASP.NET Membership.ValidateUser() 总是返回 "false",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22098194/

相关文章:

.net - 测试项目中的App.config

asp.net-mvc - 带有 EF 的自定义成员提供程序

c# - 配置文件属性不起作用

c# - 如何让用户在 c# vsto excel 加载项中选择单元格(范围输入)?

c# - Xamarin.iOS 具有等效标识错误的多个程序集

asp.net - 访问远程服务器 IIS7 上的虚拟目录时出现运行时错误

javascript - 呈现后的母版页控件 Id

mysql - 无法初始化提供程序。架构缺失或不正确。用于 MySql.Web 连接器

c# - 安装 util 在错误的文件夹上查找服务

c# - @Html.DisplayFor() 不适用于自定义模型子类