ASP.NET登录控制拒绝存在的用户

问题描述:

我在ASP.NET 2.0 Login Control中遇到了一些问题。ASP.NET登录控制拒绝存在的用户

  • 我已经用aspI.net regsql工具设置了一个数据库。
  • 我检查了应用程序名称。它被设置为“/”。

应用程序可以访问SQL服务器。事实上,当我去检索密码时,它甚至会发给我密码。尽管如此,登录控件继续拒绝登录。

我已将此添加到web.config

<membership defaultProvider="AspNetSqlProvider"> 
    <providers> 
    <clear/> 
    <add name="AspNetSqlProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> 
    </providers> 

我增加了以下我的连接字符串:

<remove name="LocalSqlServer" /> 
    <add name="LocalSqlServer" connectionString="Data Source=IDC-4\EXCALIBUR;Initial Catalog=allied_nr;Integrated Security=True;Asynchronous Processing=True"/> 

(请注意“删除名称”摆脱默认连接字符串中的App_Data目录。)

为什么不能登录控件验证用户身份?

+0

你能显示你的web.config的相应部分? – jim 2010-04-16 19:20:24

+0

你检查数据库,看看是否帐户被锁定或批准? – Zachary 2010-04-16 23:36:49

这听起来像你是采用明文存储的密码,但SqlMembershipProvider的默认密码存储格式为“散列”。如果数据库存储为散列数据,则永远无法从数据库中检索用户的密码。

+0

是什么让你认为我以纯文本存储密码? 我运行该工具创建ASP.NET成员资格模式。它不会在架构中创建默认存储方法吗? 我现在在管理工具中创建用户 - 我认为会使用默认方法,不是吗? – rsteckly 2010-04-16 23:37:54

+0

由于您的陈述,“当我去取回密码时,它甚至会发给我密码。”散列是单向的,所以如果它以散列格式存储,那么它将无法检索它,只验证用户的条目。 – cortijon 2010-04-17 18:01:26

一个伟大的一组有关Memebership提供商的文章写于4个家伙从罗拉网站。检查出来,因为我认为这会有所帮助!

http://www.4guysfromrolla.com/articles/120705-1.aspx

从系列的第4部分:

“在会员系统中,有多个方案,通过该用户的凭据是无效的:

  • 提供的用户名可能不存在于成员目录
  • 用户名可能存在,但所提供的密码可能不正确
  • 的用户名和密码可能是正确的,但:
    • 用户可能还没有被批准
    • 用户可能被锁定;如果用户试图与尝试指定数量的无效的密码登录会发生这种情况(五,默认情况下)

不幸的是,的ValidateUser(用户名,密码)方法只返回如果凭据假是无效的,并且不包括信息,至于为什么,准确地说,凭证无效”