2010-11-19 9 views
1

Mein Code hinterASP.NET Login-Steuerelement benutzerdefinierte Authentifizierung fehlschlägt

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

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

    e.Authenticated = auth; 

} 

Es in falsche Ergebnisse. Wenn ich kein OnAuthenticate-Ereignis für den Benutzer festlege, funktioniert es wie erwartet. Was gibt?

Ich möchte einfach den standardmäßigen OnAuthenticate-Code aufrufen und dann am Ende eine zusätzliche Überprüfung hinzufügen. Ich verwende LDAP zur Authentifizierung in beiden Szenarien.

+0

Können Sie bitte angeben, auf welche Art von Mitgliedschaftsanbieter Sie sich für die Authentifizierung verlassen? Gibt es einen benutzerdefinierten Mitgliedschaftsanbieter, der die abstrakte MembershipProvider-Klasse erbt? (Der Typ des Provider-Set gesetzt von in web.config) –

Antwort

2

wie in der Dokumentation auf MSDN erwähnt wird, sollte die FormsAuthentication.Authenticate Verfahren verwendet werden, falls Sie die Anmeldeinformationen in der Datei Web.config wie folgt gespeichert haben:

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

Aber wenn Sie auf Validieren der Anmeldeinformationen gegen eine Mitgliedschaft Anbieter, der fr erbt In der abstrakten MembershipProvider-Klasse wie SqlMembershipProvider, ActiveDirectoryMembershipProvider oder anderen benutzerdefinierten Anbietern sollten Sie stattdessen die Methode Membership.ValidateUser verwenden.

Ich denke, dass

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

mit

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

ersetzt wird Ihr Problem lösen.

1

Können Sie mehr Code bereitstellen? nur Authentifizieren ist AUTHENTICATE ein Benutzer, stellen Sie es doesnt ein Cookie usw. dieser Methode können Sie bestimmen, ob ein Benutzername \ Passwort gültig ist diese

(aka wenn es True zurückgibt) Versuchen Sie stattdessen den Cookie zu setzen:

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

Ich habe meinen Beitrag aktualisiert. Ich verstehe, dass ich auch den Cookie setzen muss, aber aus welchen Gründen auch immer, FormsAuthentication.Authenticate führt zu false, wenn ich Anmeldebox Benutzername/Passwort übergebe. Ich denke, dass das ursprüngliche Authenticate mehr vor diesem Anruf tut und irgendwie wahr ist. – ryan

Verwandte Themen