2013-08-10 8 views
5

Mam witrynę internetową przy użyciu ASP.net ... Używam narzędzia administracyjnego witryny ASP.net dostępnego od Visual Web Developer do dodawania/modyfikowania dostępu użytkownika do strony. Zauważyłem, że jeśli użytkownik zaznaczył pole "Zapamiętaj mnie", aby automatycznie się zalogować, wyłączenie lub usunięcie konta nie ma żadnego efektu, dopóki plik cookie nie zostanie usunięty. Dlaczego to? Czy może istnieć jakaś logika umieszczona w kodzie, który odmówi dostępu lub przekieruje go do komunikatu o błędzie dla wyłączonych lub usuniętych kont?Użytkownik ASP.NET nadal może się logować, jeśli konto jest nieaktywne lub usunięte z bazy danych

jest obecnie to, co mam w moim kod związany ...

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 

Także to jest poniżej sekcji Page_Init ...

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 

Dzięki za pomoc!

+0

Oprócz sprawdzania, czy użytkownik 'IsAuthentricated', sprawdź również, czy konto użytkownika jest nadal aktywne. –

+0

Jak sprawdzić, czy użytkownik jest aktywny czy nie? –

+0

Posiada metodę "GetUser". Jeśli użytkownik już nie istnieje, metoda zwróci wartość null. http://msdn.microsoft.com/en-us/library/40w5063z.aspx –

Odpowiedz

4

Jak już zauważyłeś, IsAuthenticated zwróci true dla użytkownika nawet po usunięciu. Wynika to z tego, że wywołanie sprawdza tylko zawartość pliku cookie uwierzytelniania, który nadal znajduje się w ich systemie.

Jednym z rozwiązań jest umożliwienie ochrony ról witryny. Korzystanie z ról oznacza, że ​​możesz chronić sekcje swojej witryny przed niektórymi kategoriami użytkowników, np. uczynienie stron administracyjnych widocznymi tylko dla podzbioru kont.

Ta informacja o roli jest zapisywana w magazynie zaplecza, a nie w pliku cookie, dlatego musi być poprawnie sprawdzana za każdym razem. Usuwany jest również po usunięciu użytkownika, dzięki czemu chronione strony będą niedostępne dla użytkownika, gdy tylko zostaną usunięte.

Nadal powinieneś być w stanie to wszystko zarządzać za pomocą narzędzi internetowych.

Więcej tutaj:

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

1

Rozwiązanie jest proste: w Global.asax.cs, wdrożyć session_start i wylogowaniu użytkownika, jeśli nie istnieje w bazie danych:

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

Stanie się tak tylko wtedy, gdy użytkownik ponownie otworzy przeglądarkę ... :( – Faiz

Powiązane problemy