Comment vérifier si un utilisateur est authentifié dans MVC5?

J’ai vu les deux booléens accessibles suivants:

  • System.Web.Mvc.Controller.User.Identity.IsAuthenticated
  • System.Web.Mvc.Controller.Request.IsAuthenticated

Y a-t-il une différence entre ceux-ci? Ils semblent tous deux faire la même chose, alors je ne suis pas sûr de savoir lequel utiliser.

Ce que je voudrais faire c’est:

 @if (User.Identity.IsAuthenticated) { if (User.IsInRole("Admin")) { @Html.ActionLink("Admin", "AdminController") } } 

ou

 @if (Request.IsAuthenticated) { if (User.IsInRole("Admin")) { @Html.ActionLink("Admin", "AdminController") } } 

Est-ce que l’un ou l’autre des éléments ci-dessus fonctionne aussi bien?

    Il n’y a pas de différence. La seule différence est que si l’utilisateur n’est pas authentifié, User.Identity pourrait être nul et que vous pourriez obtenir un NRE, alors qu’avec la seconde approche, il y a une vérification en interne et c’est plus sûr.

    Voici comment la méthode Request.IsAuthenticated est implémentée:

     public bool IsAuthenticated { get { return this._context.User != null && this._context.User.Identity != null && this._context.User.Identity.IsAuthenticated; } } 

    En gros, c’est un peu plus sûr que le premier.

    La propriété IsAuthenticated pour déterminer si la demande en cours a été authentifiée. S’il n’a pas été authentifié, la demande est redirigée vers une autre page sur laquelle les utilisateurs peuvent entrer leurs informations d’identification dans l’application Web. C’est une technique courante utilisée dans la page par défaut pour une application.

    mais quand il s’agit de User.Identity.IsAuthenticated

    La propriété User fournit un access par programme aux propriétés et aux méthodes de l’interface IPrincipal. Les pages ASP.NET contenant une référence par défaut à l’espace de noms System.Web (qui contient la classe HttpContext), vous pouvez référencer les membres de HttpContext sur une page .aspx sans utiliser la référence de classe complète à HttpContext. Par exemple, vous pouvez utiliser User.Identity.Name pour obtenir le nom de l’utilisateur pour lequel le processus en cours est exécuté. Toutefois, si vous souhaitez utiliser les membres d’IPrincipal à partir d’un module ASP.NET code-behind, vous devez inclure une référence à l’espace de noms System.Web dans le module et une référence complète au contexte de demande / réponse actif et la classe dans System.Web que vous souhaitez utiliser. Par exemple, dans une page code-behind, vous devez spécifier le nom complet