2010-04-16 87 views
0

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

回答

1

這聽起來像你是採用明文存儲的密碼,但SqlMembershipProvider的默認密碼存儲格式爲「散列」。如果數據庫存儲爲散列數據,則永遠無法從數據庫中檢索用戶的密碼。

+0

是什麼讓你認爲我以純文本存儲密碼? 我運行該工具創建ASP.NET成員資格模式。它不會在架構中創建默認存儲方法嗎? 我現在在管理工具中創建用戶 - 我認爲會使用默認方法,不是嗎? – rsteckly 2010-04-16 23:37:54

+0

由於您的陳述,「當我去取回密碼時,它甚至會發給我密碼。」散列是單向的,所以如果它以散列格式存儲,那麼它將無法檢索它,只驗證用戶的條目。 – cortijon 2010-04-17 18:01:26

0

一個偉大的一組有關Memebership提供商的文章寫於4個傢伙從羅拉網站。檢查出來,因爲我認爲這會有所幫助!

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

從系列的第4部分:

「在會員系統中,有多個方案,通過該用戶的憑據是無效的:

  • 提供的用戶名可能不存在於成員目錄
  • 用戶名可能存在,但所提供的密碼可能不正確
  • 的用戶名和密碼可能是正確的,但:
    • 用戶可能還沒有被批准
    • 用戶可能被鎖定;如果用戶試圖與嘗試指定數量的無效的密碼登錄會發生這種情況(五,默認情況下)

不幸的是,的ValidateUser(用戶名,密碼)方法只返回如果憑據假是無效的,並且不包括信息,至於爲什麼,準確地說,憑證無效」