Comment se déconnecter de l'utilisateur dans OWIN ASP.NET MVC5
J'ai un standard AccountController classe de ASP.NET MVC5 projet.
Lorsque j'essaie de déconnecter l'utilisateur, je suis confronté à une erreur coz HttpContext
est null
. (Je veux dire ici HttpContext
.GetOwinContext().L'authentification est null)
Donc je ne peux pas obtenir de la façon dont nous pouvons déconnexion de l'utilisateur de la fin de la session...
Dans mondiale.asax j'ai eu ce
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; }
}
De démarrage.Auth.cs a
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")
});
}
source d'informationauteur Academy of Programmer
Vous devez vous connecter pour publier un commentaire.
Pour cela, vous devez définir un ActionFilter attribut et là, vous avez besoin de rediriger l'utilisateur à l'action du contrôleur. Là, vous devez vérifier la valeur de session, et si ses null alors vous avez besoin de rediriger l'utilisateur. Voici le code ci-dessous( Aussi, vous pouvez visiter mon blog pour les détails de l'étape):
En supposant que vous utilisez ApplicationCookie pour stocker vos informations de connexion.
Un appel à Session_End() est à l'origine de l'exception. C'est totalement normal puisque vous ne pouvez pas simplement créer
new AccountController()
appelaccountController.SignOut()
et espérer qu'il fonctionne. Ce nouveau contrôleur n'est pas câblé dans le MVC pipeline, il n'a pas HttpContext et tous ses autres besoins afin d'être en mesure de travailler.Vous devez vous connecter les utilisateurs, en réponse à une demande qu'ils ont faite. Créer un nouveau projet MVC avec des Comptes Individuels de l'authentification. Ouvrir AccountController et de prendre un coup d'oeil à la
LogOff()
méthode:Ici
AuthenticationManager.SignOut()
sera exécutée en réponse à une requête POST à l' /Compte/Fermeture de session. Chaque fois que la demande arrive le ASP.NET/MVC va créer une instance de AccountController et l'initialiser correctement. Après la Fermeture de la méthode sera appelée où vous pouvez réellement exécuterAuthenticationManager.SignOut();
.Également dans la valeur par défaut ASP.NET/MVC l'Application de l'Identité déclare AuthenticationManager dans le Aides région du code comme suit:
Espère que cette aide.
J'ai essayé de tout cela:
mais finalement, cela a résolu mon problème:
Vérifier
``
Cela a fonctionné pour moi
Le seul problème que j'ai est il n'y a pas de redirection de Connexion si je reçois un avis pas trouvé d'erreur parce que le point de vue que je suis déconnecté de est en vertu d'un attribut [Authorize]. Je pensais que la redirection automatique a été construit en quand un utilisateur n'est pas autorisé par ce bloc de code...