Je sais que des questions similaires ont été posées auparavant, mais je n'ai pas pu trouver de doublon qui gère spécifiquement ASP.NET MVC (et l'aspect du contrôleur).Meilleure pratique pour définir/obtenir des informations sur si l'utilisateur est connecté ou non
Ma question est la suivante:
Dans un modèle MVC, je crois comprendre que le contrôleur doit gérer l'utilisation de HttpContext pour déterminer qui est connecté, le cas échéant. C'est ainsi que le contrôleur peut présenter cette information à la vue, de sorte que la vue elle-même n'a pas à effectuer ces recherches.
Existe-t-il un standard de fait sur la façon de le faire?
Ma configuration actuelle est la suivante [simplifiée]
J'ai un BaseController
, que tous mes autres contrôleurs héritent.
En BaseController
, j'effectue la commande prioritaire suivante:
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
base.Initialize(requestContext);
ViewData["IsUserLoggedIn"] = IsUserLoggedIn; // bool property checking HttpContext.User.Identity.IsAuthenticated;
ViewData["CurrentUser"] = CurrentUser; // Property returning logged in user, or null.
}
Puis, naturellement, dans mes vues, je peux vérifier les valeurs vidéotex.
Comment faire vous le faire? J'aimerais savoir si quelque chose ne va pas dans ma configuration, et si oui, quel est le problème? Je ne suis pas à 100% à l'aise avec ma solution, principalement parce que je ne connais pas très bien le cycle, et je ne sais pas si j'ai placé mon code au bon endroit. Je suis conscient qu'il n'y a peut-être pas «une seule réponse qui les lie tous», j'accepte la réponse qui offre le plus de perspicacité.
Approche intéressante. Comment votre schéma de cookies se rapporte-t-il au cookie FormsAuthentication (si vous utilisez l'authentification par formulaire, bien sûr)? – Terje
Je n'utilise pas FormsAuthentication, mais j'utilise un FormsAuthenticationTicket et un HttpCookie réguliers. Lorsqu'un utilisateur tente de se connecter, mon contrôleur appelle d'abord ma couche de domaine pour essayer de se connecter à l'utilisateur. Si cela réussit, mon contrôleur crée un objet FormsAuthenticationTicket contenant mon nom d'utilisateur chiffré, le place dans un HttpCookie et place ce cookie dans la collection Response.Cookies. Dans le passé, j'ai également dû ajouter quelque chose au système pour suivre l'utilisateur qui était connecté (c'est-à-dire que vous chargez l'utilisateur à partir du ticket, puis vérifiez s'il était connecté). –
Je cherchais un aperçu, et j'en ai eu. Merci. Je vais regarder dans cette approche et voir de ma propre expérience comment il se compare à ce que j'utilise actuellement. Suivre si les utilisateurs sont connectés ou non Je gère cela avec un tampon de dernière activité dans ma table utilisateur, en le mettant à jour à chaque fois que l'initialisation de BaseController est appelée. – Terje