11
votes

Comment se déconnecter utilisateur dans owin asp.net mvc5

J'ai une standard CompteController Classe Projet ASP.NET MVC5. Lorsque j'essaie de vous déconnecter 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 comment nous pouvons vous déconnecter lorsque la session se termine ... < / forte>

dans global.asax j'ai ce xxx

CompteController xxx

startup.auth.cs a xxx


0 commentaires

6 Réponses :


9
votes

Un appel à session_end () provoque l'exception. Cela est totalement attendu car vous ne pouvez pas simplement créer Nouveau CompteController () , appelez CompteController.signout () et attendez-vous à fonctionner. Ce nouveau contrôleur n'est pas utilisé dans le pipeline MVC - il n'a pas httpContext et toutes ses autres exigences pour pouvoir fonctionner.

Vous devez enregistrer les utilisateurs en réponse à une demande qu'ils ont apportée. Créez un nouveau projet MVC avec l'authentification des comptes individuels. Ouvrez CompteController et jetez un coup d'œil à la méthode logoff () : xxx

ici authentificationmanager.signout ( ) sera exécuté en réponse à une demande postale sur / compte / déconnexion. Chaque fois qu'une telle demande arrive, ASP.NET/MVC créera une instance de comptyController et l'initialisera correctement. Après cela, la méthode de la déconnexion sera appelée où vous pouvez réellement exécuter authentificationmanager.signout (); .

également dans l'application ASP.NET /MVC par défaut, déclare AuthentificationManager dans les aides la région du code comme suit: xxx

espère que cela aide.


10 commentaires

Oui je suis d'accord. Nous avons cette méthode par défaut mais je voudrais forcer à déconnecter un utilisateur et à le rediriger vers la page de connexion. J'ai donc besoin de solution pour le faire avec Owin. Quoi qu'il en soit, merci de votre avis!


@Clarkkent Cette solution le fait avec Owin, j'ai édité la réponse pour expliquer comment cela le fait. S'il vous plaît voir les modifications en attente. Milan explique pourquoi cela jette une erreur avant de vous déconnecter de vos utilisateurs.


Eh bien ... ijust code commenté dans session_end et je suis confronté à un comportement étrange de l'application. Je mets SessionTimeout 1 min. Quand je me connecte et que je ne fais rien, ça marche bien. Donc, 1 min plus tard, lorsque je rafraîchis les pages, il se déconnecte et redirige vers la page de connexion. Mais si pendant 2-3 minutes. Je navigue dans le site Web, cela ne fonctionne pas. :)


@Clarkkent êtes-vous activement naviguer dans le site Web pendant ces 2-3 minutes? Avez-vous essayé d'aller à une page différente, assise pendant une minute et ensuite bouger? Si tel est le cas, essayez de sortir votre variable de session pour voir si elle est toujours définie ou réinitialisée. Cette fonction ou votre fonction qui enregistre l'utilisateur n'est pas appelée lorsque vous naviguez vers une page différente.


Oui. J'utilise différentes pages pour naviguer. Ainsi, lorsque l'utilisateur est actif d'une application d'une manière active (ASP.NET MVC) ignore un intervalle d'extirpation 1 min ...


Bien. Je peux confirmer que la configuration fonctionne comme si l'utilisateur est inactif pendant 1 min, il forcera à vous déconnecter de l'utilisateur et, sinon, l'utilisateur peut travailler et que l'intervalle d'expiration n'a pas d'impact.


Au moins la logique derrière la pièce de déconnexion fonctionne. Je pense que si vous découvrez comment faire appel à cet appel aux autres parties du programme, cela fonctionnera. Avez-vous essayé de définir le délai d'attente dans votre web.config ? ou


Laissez-nous Continuez cette discussion en chat .


Votre code est un peu un morceau, mais même si vous obtenez les appels pour peupler le contexte, vous pouvez toujours faire face à un problème distinct, comme indiqué dans certaines demandes de bogues sur le site Codéplex. katanaproject.codeplex.com/workitem/356 . Vous devez appeler authentificationmanager.signout (DefaultAuthenticationTypes. Application lindiccookie); pas seulement authentificationmanager.signout ();


Après avoir utilisé la bibliothèque personnalisée pour réparer le problème de la cookie avec Owin, ce commentaire corrige mes problèmes de déconnexion! Peut-être que cette tour se tiendra une semaine ...



2
votes

Pour cela, vous devez définir un attribut Actionfilter et vous devez rediriger l'utilisateur à l'action du contrôleur respective. Vous devez vérifier la valeur de la session et si son NULL, alors vous devez rediriger l'utilisateur. Voici le code ci-dessous ( aussi Vous pouvez visiter mon blog pour le détail étape ): xxx


0 commentaires

14
votes

En supposant que vous utilisiez ApplicationCookie pour stocker vos informations de connexion.

AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);


4 commentaires

Il dit que l'Authmanager n'a pas de méthode Signout


Vous pouvez essayer avec var ctx = demande.getowincontext (); Var AuthenticationManager = CTX.Authentification; authentificationmanager.signout (DefaultAuthentisticationTypes.app lindiccookie);


@Phil il suffit de supprimer le cookie. La page ne redirige pas de la page de connexion Sauf Refresh Y a-t-il un moyen d'invalider l'identité après la détection de la même demande?


@msz Oui, j'ai compris que l'année dernière, haha



3
votes

J'ai essayé tout cela: xxx

mais enfin cela résolu mon problème: xxx

CHeck


0 commentaires

2
votes
Session.Abandon();
var owinContext = System.Web.HttpContext.Current.Request.GetOwinContext();
var authenticationTypes = owinContext.Authentication.GetAuthenticationTypes();
owinContext.Authentication.SignOut(authenticationTypes.Select(o => o.AuthenticationType).ToArray());
```

0 commentaires

1
votes

Ceci a fonctionné pour moi xxx

Le seul problème que j'ai est qu'il n'y a pas de redirection pour vous connecter, donc je reçois une vue non trouvée erronée car la vue que j'ai déconnecté est sous un [Autoriser] attribut. Je pensais que la redirection automatique a été intégrée lorsqu'un utilisateur n'est pas autorisé par ce bloc de code ... xxx


0 commentaires