2010-11-19 108 views
1

我身後ASP.NET登錄控件的自定義驗證失敗

protected void LogonForm_Authenticate(object sender, AuthenticateEventArgs e) 
{ 
    bool auth = false; 

    if (FormsAuthentication.Authenticate(LogonForm.UserName, LogonForm.Password)) 
    { 
     auth = true; 
    } 

    e.Authenticated = auth; 

} 

它導致虛假代碼。當我沒有指定一個OnAuthenticate事件時,用戶被驗證,它按預期工作。是什麼賦予了?

我只是想調用默認的OnAuthenticate代碼,然後在它的結尾添加一個額外的檢查。我在兩種情況下都使用LDAP進行身份驗證。

+0

您能否提一下您依靠什麼樣的會員供應商進行身份驗證?某些自定義成員資格提供程序是否繼承了MembershipProvider抽象類? (在web.config中設置的提供者集合的類型從) – 2010-11-19 22:01:12

回答

2

正如在MSDN文檔中提到的,FormsAuthentication.Authenticate方法應該在的情況下使用已存儲在Web.config文件中像這樣的憑據:

<authentication mode="Forms"> 
    <forms loginUrl="login.aspx"> 
     <credentials passwordFormat="Clear"> 
      <user name="user1" password="password1" /> 
      <user name="user2" password="password2" /> 
     </credentials> 
</forms> 
</authentication> 

但如果你對驗證會員證書繼承fr的提供者om MembershipProvider抽象類,如SqlMembershipProvider,ActiveDirectoryMembershipProvider或其他自定義提供程序,您應該使用Membership.ValidateUser方法。

我認爲,隨着

if (Membership.ValidateUser(LoginUser.UserName, LoginUser.Password)) 

更換

if (FormsAuthentication.Authenticate(LogonForm.UserName, LogonForm.Password)) 

將解決你的問題。

1

你能提供更多的代碼嗎?驗證只AUTHENTICATE是一個用戶,它並不設置cookie等使用此方法來確定一個用戶名\密碼是有效的(也就是如果返回true)

試試這個設置Cookie:

Dim boolVal as Boolean = FormsAuthentication.Authenticate(LogonForm.UserName, LogonForm.Password) 
If boolVal Then 
    FormsAuthentication.SetAuthCookie(LogonForm.UserName,False) 
End If 
+0

我更新了我的帖子。我知道我也需要設置cookie,但無論什麼原因,當我傳遞登錄框的用戶名/密碼時,FormsAuthentication.Authenticate會導致false。我認爲最初的Authenticate在這個調用之前做得更多,並且以某種方式導致了真實性。 – ryan 2010-11-19 18:19:01