2014-09-16 26 views
16

Sto usando asp.net MVC e ASP.net Identity 2.0.ASP.net Identity 2.0 Disconnetti un altro utente

Sul mio sito web l'amministratore ha l'opzione di vietare l'utente, e vorrei che, quando l'utente viene bannato, venga automaticamente disconnesso dal sito.

so che posso firmare-out dell'utente corrente chiamando

AuthenticationManager.SignOut(); 

ma è possibile firmare-out un altro utente? O forse più breve la sua sessione? O qualcosa?

so che potrei fare filtro globale sui controller che vietano utenti esclusi da accesso, ma che il filtro sarebbe corse contro ogni utente in modo da non sto zitto soddisfatto di questa soluzione.

+1

Si dovrebbe memorizzare nella cache tutti gli utenti divieto e quindi eliminare il suo biscotto al filtro. – Fals

risposta

12

Avrai bisogno di configurare cookie di invalidazione in Auth.Config.cs:

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 
} 

e quindi aggiornare timbro di sicurezza come dice Hao Kung quando gli utenti sono vietati.

ho blogged about this recently

+0

app.CreatePerOwinContext (UserManager.Create): fai il trucco per me. Sto usando autofac, quindi nel mio caso, che appare così: app.CreatePerOwinContext (() => DependencyResolver.Current.GetService ()); app.CreatePerOwinContext (() => DependencyResolver.Current.GetService >()); Dove Db è DbContext e User è una classe derivata da IdentityUser – Sergey

14

Se si utilizza la funzione securitystampvalidator, quando un utente è bannato, è sufficiente chiamare: UpdateSecurityStamp(userId) affinché i cookie di accesso esistenti non siano validi la volta successiva che vengono selezionati.

More info about SecurityStamp?

+0

Ho aggiunto quella riga di codice nel mio progetto ma l'utente non è stato disconnesso, puoi spiegarmi un po 'come dovrei usarlo? – hyperN

+7

Esso non registra l'utente subito fuori, c'è il validateInterval sul francobollo di sicurezza che è necessario configurare per quanto tempo il cookie viene convalidato. –

Problemi correlati