Wie logout Benutzer in OWIN ASP.NET MVC5
Habe ich eine standard - AccountController Klasse von ASP.NET MVC5 Projekt.
Wenn ich versuche, Benutzer Abmelden, das ich mich vor einem Fehler coz HttpContext
ist null
. (Ich meine hier HttpContext
.GetOwinContext().Authentifizierung ist null)
, So kann ich nicht bekommen, wie können wir den Abmelden-Benutzer, wenn die Sitzung endet...
In global.asax ich habe diese
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; }
}
Start.Auth.cs hat
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")
});
}
InformationsquelleAutor Academy of Programmer | 2014-10-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für diese müssen Sie definieren einen ActionFilter Attribut und dort müssen Sie leiten den Benutzer auf die jeweiligen controller-action. Dort müssen Sie prüfen, die für die session-Wert und wenn der null ist, dann müssen Sie zum umleiten des Benutzers. Hier ist der code unten( Auch Sie können besuchen Sie mein blog für detail-Schritt):
InformationsquelleAutor Hrushikesh Patel
Davon aus, dass du mit ApplicationCookie um Ihre Anmeldeinformationen zu speichern.
SignOut
Sie können versuchen, mit var ctx = Anfrage.GetOwinContext(); var authenticationManager = ctx.Authentifizierung; authenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
es ist einfach den cookie löschen. Seite tust nicht umleiten auf die login-Seite, es sei denn, aktualisieren, gibt es eine Möglichkeit zu entkräften Identität nach signout auf die gleiche Anfrage?
Ja, ich dachte mir, dass im vergangenen Jahr, haha
InformationsquelleAutor radbyx
Einen Anruf zu Session_End() verursacht die Ausnahme. Das ist völlig zu erwarten, da kann man nicht einfach erstellen
new AccountController()
rufenaccountController.SignOut()
und erwarten, dass es funktioniert. Dieser neue controller ist nicht verdrahtet in der MVC pipeline - es muss nicht HttpContext und alle anderen Anforderungen arbeiten zu können.Melden Sie Benutzer in Reaktion auf eine Anforderung, die Sie gemacht haben. Erstellen Sie ein neues MVC Projekt mit Individuellen Konten, Authentifizierung. Öffnen AccountController und werfen Sie einen Blick auf die
LogOff()
Methode:Hier
AuthenticationManager.SignOut()
ausgeführt wird in Reaktion auf eine POST-Anforderung an /Konto/Abmelden. Wenn eine solche Anfrage kommt, die ASP.NET/MVC erstellt eine Instanz der AccountController, und initialisieren Sie es richtig. Danach werden die LogOff-Methode aufgerufen werden, wo Sie tatsächlich ausführenAuthenticationManager.SignOut();
.Ebenfalls in der Standard ASP.NET/MVC Anwendung mit Identität erklärt AuthenticationManager in der Helfer region code wie folgt:
Hoffe, das hilft.
Diese Lösung macht es mit OWIN, die ich bearbeitet haben, die Antwort zu erklären, wie es funktioniert. Finden Sie die anstehenden änderungen. Mailand erklärt, warum es ein Fehler ausgegeben, bevor Sie zur Abmeldung Ihre Benutzer.
Naja... Ijust kommentierten code innerhalb
Session_End
und ich bin mit seltsamen Verhalten der Anwendung. Ich legte SessionTimeout 1 min. Wenn ich login und nichts tun, es ist in Ordnung. So 1 min später wenn ich refresh-Seiten, die es sich abmeldet und umleiten auf die LOGIN-Seite. Aber wenn während 2-3 Minuten. Ich bin die Navigation innerhalb der website, es funktioniert nicht. 🙂Werden Sie aktiv navigieren durch die website während dieser 2-3 Minuten? Haben Sie versucht, eine andere Seite, sitzen für eine minute, und dann bewegen? Wenn ja, versuchen-und-Ausgang Ihre session-variable, um zu sehen, ob es noch gesetzt ist oder sich zurückgesetzt. Oder Ihre Funktion, die den Benutzer abmeldet wird nicht aufgerufen, wenn Sie navigieren Sie zu einer anderen Seite.
Dein code ist ein bisschen ein Durcheinander aber wenn man sich die Aufrufe zum füllen der Rahmen können Sie immer noch vor einem anderen Problem, wie in einigen bug-Anfragen auf der codeplex-Website. katanaproject.codeplex.com/workitem/356 .Müssen Sie rufen Sie AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie), nicht nur die AuthenticationManager.SignOut();
InformationsquelleAutor Milan Nankov
Ich habe versucht, all dies aus:
aber schließlich ist dies mein problem gelöst:
Überprüfen
InformationsquelleAutor nasir taha
``
InformationsquelleAutor Stephan Ahlf
Dieser arbeitete für mich
Das einzige problem das ich habe ist, dass es kein redirect auf Login, so bekomme ich einen view nicht gefunden " - Fehler, da die Sicht ich abgemeldet, ist unter einer [Genehmigen] - Attribut. Ich dachte, die automatische Umleitung gebaut wurde, wenn ein Benutzer nicht autorisiert ist, die von dieser code-block...
InformationsquelleAutor Daniel Jackson