2015-02-21 15 views
34

Sto utilizzando un accesso di base su un sito ASP.Net MVC 5 di test (per un sito Internet).ASP.Net MVC 5 con identità 2.2.0 Disconnessione non funzionante

Il login funziona bene ma quando provo a disconnettersi non succede. Il collegamento di logout fa chiamare il seguente azione di controllo:

public ActionResult LogOff() 
{ 
    AuthenticationManager.SignOut(); 
    return RedirectToAction("Index", "Home"); 
} 

Ma l'utente rimane connesso Come faccio a garantire che l'utente in realtà viene disconnesso.?

+0

Può essere correlato a questo http://stackoverflow.com/questions/28263095/logout-functionality-not-working-with-asp-net-identity – janhartmann

risposta

49

Ho avuto questo problema prima, il cambiamento:

AuthenticationManager.SignOut(); 

A:

AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie); 

Supponendo che si sta utilizzando ApplicationCookie per memorizzare le informazioni di login.

+2

Grazie - ha funzionato per me. Piccola nota: dovrebbe essere 'AuthenticationManager' (per il codice generato automaticamente) e non' Authentication'. –

+0

In realtà non si disconnette dal lato server. https://stackoverflow.com/questions/24552448/web-api-2-owin-authentication-signout-doesnt-logout –

+0

@JeevaJsb la domanda riguarda i token al portatore, che sono completamente diversi dai cookie –

-4

Ho avuto lo stesso problema di non poter effettuare il logout. Vorrei rimanere loggato e reindirizzare solo alla vista home. Stavo usando Chrome e l'ho provato in Firefox e cioè e non ho avuto il problema. Poi ho cancellato i miei biscotti in chrome e tutto ha funzionato bene. Potrebbe essere un primo passo facile e veloce se altri incontrano questo problema.

+2

Abbiamo riscontrato lo stesso problema con la nostra applicazione dopo l'aggiornamento da AspNet.Identity 2.0.1 a 2.2.0. La cancellazione dei cookie ha effettivamente firmato l'utente, ma non è stata una soluzione molto pratica. Abbiamo implementato la correzione nella risposta accettata e ha risolto il problema per noi. – Avalanchis

2

modo migliore:

public ActionResult Logout() 
{ 
    SignInManager.AuthenticationManager.SignOut(); 
    return RedirectToAction("Index", "support", new { area = "" }); 
} 

oppure è possibile utilizzare iniettato SignInManager nel controller come questo:

public ActionResult Logout() 
{ 
    _signInManager.AuthenticationManager.SignOut(); 
    return RedirectToAction("Index", "support", new { area = "" }); 
} 

non v'è alcuna deferenza.