Posiadam standardową klasę AccountController z projektu ASP.NET MVC5. Podczas próby wylogowania użytkownika napotykam błąd o numerze HttpContext
: null
. (Mam na myśli tutaj HttpContext
.GetOwinContext(). Authentication jest null)Jak się wylogować użytkownika w OWIN ASP.NET MVC5
Więc nie mogę się w jaki sposób możemy się wylogować użytkownika po zakończeniu sesji ...
W global.asax mam to
protected void Session_Start(object sender, EventArgs e)
{
Session.Timeout = 3;
}
protected void Session_End(object sender, EventArgs e)
{
try
{
var accountController = new AccountController();
accountController.SignOut();
}
catch (Exception)
{
}
}
AccountController
public void SignOut()
{
// Even if I do It does not help coz HttpContext is NULL
_authnManager = HttpContext.GetOwinContext().Authentication;
AuthenticationManager.SignOut();
}
private IAuthenticationManager _authnManager; // Add this private variable
public IAuthenticationManager AuthenticationManager // Modified this from private to public and add the setter
{
get
{
if (_authnManager == null)
_authnManager = HttpContext.GetOwinContext().Authentication;
return _authnManager;
}
set { _authnManager = value; }
}
Startup.Auth.cs ma
public void ConfigureAuth(IAppBuilder app)
{
// Enable the application to use a cookie to store information for the signed in user
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
ExpireTimeSpan = TimeSpan.FromMinutes(3),
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
}
Tak, zgadzam się. Domyślnie mamy tę metodę, ale chciałbym wymusić wylogowanie użytkownika i przekierowanie go na stronę logowania. Potrzebuję więc rozwiązania, by zrobić to z OWINEM. W każdym razie dziękuję za twoją opinię! –
@ClarkKent To rozwiązanie działa z OWINEM, zredagowałem odpowiedź, aby wyjaśnić, jak to działa. Zobacz oczekujące zmiany. Milan wyjaśnia, dlaczego zgłasza błąd, zanim wylogujesz się z użytkowników. – Termato
Cóż ... Ijust skomentował kod w 'Session_End' i mam do czynienia z dziwnym zachowaniem aplikacji. Wpisuję SessionTimeout 1 min. Kiedy się loguję i nic nie robię, wszystko działa dobrze. Tak więc 1 minutę później, gdy odświeżam strony, wylogowuje się i przekierowuje na stronę LOGIN. Ale jeśli w ciągu 2-3 minut. Nawiguję w witrynie, która nie działa. :) –