2013-08-10 1 views
5

Ich habe eine Website mit ASP.net ... Ich benutze die ASP.net Website-Verwaltung-Tool von Visual Web Developer zugegriffen, um Benutzerzugriff zu ändern zum Ort. Ich habe festgestellt, dass das Deaktivieren des Kontos oder das Löschen des Kontos keine Auswirkungen hat, wenn der Benutzer das Feld "Angemeldet bleiben" für die automatische Anmeldung deaktiviert hat, bis das Cookie entfernt wird. Warum ist das? Kann es eine Art von Logik geben, die hinter dem Code steht, der den Zugriff verweigert oder sie an eine Fehlermeldung für deaktivierte oder gelöschte Konten weiterleitet? DieseASP.NET-Benutzer kann sich immer noch anmelden, wenn das Konto inaktiv ist oder aus der Datenbank gelöscht wird

ist derzeit, was ich habe in meinem Code hinter ...

Protected Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init 

    If User.Identity.IsAuthenticated Then 
     Response.Redirect("~/homepage") 
    End If 

End Sub 

dies auch unter dem Page_Init Abschnitt ...

Protected Sub LoginUser_LoginError(sender As Object, e As System.EventArgs) Handles LoginUser.LoginError 

    LoginUser.FailureText = "Invalid Username or Password - Please Try Again" 

    Dim usrInfo As MembershipUser = Membership.GetUser(LoginUser.UserName) 

    If usrInfo IsNot Nothing Then 
     If usrInfo.IsLockedOut Then 
      LoginUser.FailureText = "Your account has been locked - Contact the system administrator" 
     ElseIf Not usrInfo.IsApproved Then 
      LoginUser.FailureText = "Your account is disabled - Contact the system administrator" 
     End If 
    End If 

End Sub 

Danke für die Hilfe!

+0

Überprüfen Sie nicht nur, ob der Benutzer "IsAuthentricated" ist, sondern auch, ob das Benutzerkonto noch aktiv ist. –

+0

Wie überprüfe ich, ob der Benutzer aktiv ist oder nicht? –

+0

Es hat eine 'GetUser'-Methode. Wenn der Benutzer nicht mehr existiert, gibt die Methode null zurück. http://msdn.microsoft.com/en-us/library/40w5063z.aspx –

Antwort

4

Wie Sie bemerkt haben, wird IsAuthenticated für einen Benutzer auch dann true zurückgeben, wenn sie entfernt wurden. Dies liegt daran, dass der Anruf nur den Inhalt des Authentifizierungscookies überprüft, der sich noch auf seinem System befindet.

Eine Lösung besteht darin, rollenbasierte Sicherheit für die Site zu ermöglichen. Das Verwenden von Rollen bedeutet, dass Sie Bereiche Ihrer Website vor bestimmten Kategorien von Benutzern schützen können, z. die Verwaltungsseiten nur für eine Teilmenge von Konten sichtbar machen.

Diese Rolleninformationen werden im Backing Store und nicht im Cookie gespeichert. Daher muss sie jedes Mal ordnungsgemäß überprüft werden. Es wird auch gelöscht, wenn der Benutzer gelöscht wird. Ihre geschützten Seiten sind daher für den Benutzer nicht mehr zugänglich, sobald sie entfernt werden.

Sie sollten immer noch in der Lage sein, all dies über die webbasierten Tools zu verwalten.

Mehr hier:

http://msdn.microsoft.com/en-us/library/5k850zwb.aspx

1

Die Lösung ist einfach: in global.asax.cs, session_start implementieren und den Benutzer abzumelden, wenn sie nicht in der Datenbank vorhanden:

protected void Session_Start() 
    { 
     if (User.Identity.IsAuthenticated 
      && // !(user exists in the database) 
      ) 
     { 
      // Remove this forms-authentication cookie, and redirect to sign in without processing this request any further. 
      FormsAuthentication.SignOut(); 
      FormsAuthentication.RedirectToLoginPage(); 
     } 
    } 
+0

Dies geschieht nur, wenn der Benutzer den Browser wieder öffnet ... :( – Faiz

Verwandte Themen