Odpowiedz

9

Tożsamość nie posiada wbudowany w sposób śledzenia jednoczesnych loginów, ale można zrobić obejście: za każdym razem, dzienniki-in użytkownika, przed ustawieniem auth-ciasteczko, zmiana użytkownika SecurityStamp przez await userManager.UpdateSecurityStampAsync(user.Id);

I upewnij się, że tę część w swojej Startup.Auth.cs:

 app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      Provider = new CookieAuthenticationProvider 
      { 
       // Enables the application to validate the security stamp when the user logs in. 
       // This is a security feature which is used when you change a password or add an external login to your account. 
       OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
        validateInterval: TimeSpan.FromMinutes(5), 
        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
      } 
     });    

w ten sposób każdy użytkownik logowania czas, wszystkie inne sesje zostaną unieważnione, ponieważ SecurityStamp na użytkownika jest zmieniane. I validateInterval do wystarczająco niskiej wartości, więc inne auth-cookies mogą zostać wkrótce unieważnione.

+0

Szukałem sposobu na uniknięcie logowania, jeśli istnieje aktywna sesja dla tego użytkownika. UserManager.GetSecurityStampAsync zrobi lewy? –

+1

@ThiagoCustodio 'GetSecurityStampAsync' zwróci ci tylko znaczek bezpieczeństwa, który jest identyfikatorem GUID zapisanym w zbiorze użytkownika - sam w sobie nie robi zbyt wiele. Jeśli chodzi o unikanie logowania po raz drugi, jest to o wiele bardziej skomplikowane - będziesz musiał jakoś śledzić bieżącą sesję, zachowaj ID dla tego, umieść ten identyfikator w auth-cookie i przy logowaniu sprawdź, czy bieżąca sesja jest taka sama jak już zapisana . I mogę przewidzieć stos problemów z tym podejściem. Ostatecznie, jeśli chcesz, aby użytkownicy przestali udostępniać login, sugerowane podejście wkrótce je udostępni, ponieważ dzielenie haseł jest złe. – trailmax

+0

czeka na userManager.UpdateSecurityStampAsync (user.Id), w którym pliku w MVC 5? – SAR

Powiązane problemy