2014-09-16 22 views
16

Ich benutze asp.net MVC und ASP.net Identity 2.0.ASP.net Identity 2.0 Abmelden eines anderen Benutzers

Auf meiner Website Admin hat die Option, Benutzer zu verbieten, und ich möchte, wenn Benutzer gesperrt ist, dass er automatisch von der Website abgemeldet ist.

Ich weiß, dass ich durch den Aufruf

AuthenticationManager.SignOut(); 

aktuellen Benutzer Abmelde kann aber ist es möglich, einen anderen Benutzer zu Abmelde? Oder vielleicht kürzer seine Sitzung? Oder irgendwas ?

Ich weiß, ich könnte globale Filter auf den Controllern verbieten verbotenen Benutzern den Zugriff, aber dieser Filter würde gegen jeden Benutzer ausgeführt werden, so dass ich nicht ruhig mit dieser Lösung zufrieden bin.

+1

Sie sollten jedes Verbot Benutzer-Cache und dann seine Cookie am Filter löschen. – Fals

Antwort

12

Sie benötigen Cookie Ungültigkeits in Auth.Config.cs konfigurieren:

public void ConfigureAuth(IAppBuilder app) 
{ 
    // important to register UserManager creation delegate. Won't work without it 
    app.CreatePerOwinContext(UserManager.Create); 

    app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
     Provider = new CookieAuthenticationProvider 
     { 
      OnValidateIdentity = SecurityStampValidator 
       .OnValidateIdentity<UserManager, ApplicationUser, int>(
        validateInterval: TimeSpan.FromMinutes(10), 
        regenerateIdentityCallback: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
     }, 
     // other configurations 
    }); 

    // other stuff 
} 

und dann Sicherheit Stempel aktualisieren, wie Hao Kung sagt, wenn Benutzer verboten sind.

Ich habe blogged about this recently

+0

app.CreatePerOwinContext (UserManager.Create) - machen Sie den Trick für mich. Ich benutze Autofac, also in meinem Fall sieht es so aus: app.CreatePerOwinContext (() => DependencyResolver.Current.GetService ()); app.CreatePerOwinContext (() => DependencyResolver.Current.GetService >()); Wo Db ist DbContext und Benutzer ist eine Klasse, die von IdentityUser abgeleitet ist – Sergey

14

Wenn Sie die Funktion "safetystampvalidator" verwenden, rufen Sie bei einem gesperrten Benutzer einfach: UpdateSecurityStamp(userId) auf, damit vorhandene Anmelde-Cookies bei der nächsten Überprüfung ungültig werden.

More info about SecurityStamp?

+0

Ich habe diese Codezeile in meinem Projekt hinzugefügt, aber Benutzer wurde nicht ausgeloggt. Können Sie mir etwas weiter erklären, wie soll ich es verwenden? – hyperN

+7

Es protokolliert den Benutzer nicht sofort, da ist der validateInterval auf dem Sicherheitsstempel, den Sie konfigurieren müssen, wie oft der Cookie validiert wird. –

Verwandte Themen