web-dev-qa-db-fra.com

Comment obtenir l'utilisateur actuel dans ASP.NET MVC

Dans un modèle de formulaire, j'avais l'habitude d'obtenir l'utilisateur actuellement connecté en:

Page.CurrentUser

Comment obtenir l'utilisateur actuel dans une classe de contrôleur dans ASP.NET MVC?

261
Serhat Ozgel

Si vous devez obtenir l'utilisateur depuis le contrôleur, utilisez la propriété User de Controller. Si vous en avez besoin dans la vue, je renseignerais ce dont vous avez spécifiquement besoin dans la ViewData, ou vous pouvez simplement appeler User car je pense que c'est une propriété de ViewPage.

256
Haacked

J'ai trouvé que User fonctionne, c'est-à-dire User.Identity.Name ou User.IsInRole("Administrator").

188
Pieter

Essayez HttpContext.Current.User.

Propriété partagée publique Current () As System.Web.HttpContext
Membre de System.Web.HttpContext

Sommaire:
Obtient ou définit l'objet System.Web.HttpContext pour la requête HTTP actuelle.

Valeurs de retour:
System.Web.HttpContext pour la requête HTTP actuelle

57
dove

Vous pouvez obtenir le nom de l'utilisateur dans ASP.NET MVC4 comme ceci:

System.Web.HttpContext.Current.User.Identity.Name
37
radbyx

Je me rends compte que c'est vraiment vieux, mais je commence tout juste à utiliser ASP.NET MVC, alors j'ai pensé y mettre mes deux sous:

  • Request.IsAuthenticated vous indique si l'utilisateur est authentifié.
  • Page.User.Identity vous donne l'identité de l'utilisateur connecté.
20
jrb

J'utilise:

Membership.GetUser().UserName

Je ne suis pas sûr que cela fonctionnera dans ASP.NET MVC, mais cela en vaut la peine :)

16
Sean

se connecter nom d'utilisateur: System.Web.HttpContext.Current.User.Identity.Name

11
tifoz

Pour référencer un ID utilisateur créé à l’aide d’une authentification simple intégrée à ASP.NET MVC 4 dans un contrôleur à des fins de filtrage (ce qui est utile si vous utilisez d’abord la base de données et Entity Framework 5 pour générer des liaisons avec le code d’abord et que vos tables sont structurées de manière à: qu'une clé étrangère à l'ID utilisateur est utilisée), vous pouvez utiliser

WebSecurity.CurrentUserId

une fois que vous ajoutez une instruction using

using System.Web.Security;
9
MattC

Nom d'utilisateur avec:

User.Identity.Name

Mais si vous ne devez obtenir que l'ID, vous pouvez utiliser:

using Microsoft.AspNet.Identity;

Ainsi, vous pouvez obtenir directement l'ID utilisateur:

User.Identity.GetUserId();
7

Utilisez System.Security.Principal.WindowsIdentity.GetCurrent().Name.

Cela obtiendra l'utilisateur Windows actuellement connecté.

5
Clay Smith

Nous pouvons utiliser le code suivant pour obtenir l'utilisateur actuellement connecté dans ASP.Net MVC:

var user= System.Web.HttpContext.Current.User.Identity.GetUserName();

Aussi

var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give 'Domain//UserName'

Environment.UserName - Will Display format : 'Username'
5
Raj Baral

Cette page pourrait être ce que vous cherchez:
tilisation de Page.User.Identity.Name dans MVC

Vous avez juste besoin de User.Identity.Name.

5
heriawan

Si vous vous trouvez dans votre page de connexion, dans un événement LoginUser_LoggedIn, par exemple, Current.User.Identity.Name renvoie une valeur vide. Vous devez donc utiliser votre propriétéLoginControlName.UserName.

MembershipUser u = Membership.GetUser(LoginUser.UserName);
4
live-love

Pour ce que cela vaut, dans ASP.NET MVC 3, vous pouvez simplement utiliser Utilisateur qui renvoie l'utilisateur pour la demande en cours.

4
Pieter
IPrincipal currentUser = HttpContext.Current.User;
bool writeEnable = currentUser.IsInRole("Administrator") ||
        ...
                   currentUser.IsInRole("Operator");
3

Vous pouvez utiliser le code suivant:

Request.LogonUserIdentity.Name;
3
Rajeev Jayaswal

Si vous travaillez dans Active Directory sur un intranet, voici quelques conseils:

(Windows Server 2012)

Exécuter tout ce qui parle à AD sur un serveur Web nécessite beaucoup de modifications et de patience. Dans la mesure où, lorsqu'il est exécuté sur un serveur Web par rapport à IIS/IIS Express local, il fonctionne sous l'identité de l'AppPool. Vous devez donc le configurer pour emprunter l'identité de celui qui visite le site.

Comment obtenir l'utilisateur actuellement connecté dans un Active Directory lorsque votre application ASP.NET MVC s'exécute sur un serveur Web à l'intérieur du réseau:

// Find currently logged in user
UserPrincipal adUser = null;
using (HostingEnvironment.Impersonate())
{
    var userContext = System.Web.HttpContext.Current.User.Identity;
    PrincipalContext ctx = new PrincipalContext(ContextType.Domain, ConfigurationManager.AppSettings["AllowedDomain"], null,
                                                ContextOptions.Negotiate | ContextOptions.SecureSocketLayer);
    adUser = UserPrincipal.FindByIdentity(ctx, userContext.Name);
}
//Then work with 'adUser' from here...

Vous devez encapsuler tous les appels ayant trait au "contexte Active Directory" dans les éléments suivants afin qu'il agisse en tant qu'environnement d'hébergement pour obtenir les informations AD:

using (HostingEnvironment.Impersonate()){ ... }

Vous devez également avoir impersonate défini sur true dans votre web.config:

<system.web>
    <identity impersonate="true" />

L'authentification Windows doit être activée dans web.config:

<authentication mode="Windows" />
2
Beau D'Amore
var ticket = FormsAuthentication.Decrypt(
                    HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName].Value);

if (ticket.Expired)
{
    throw new InvalidOperationException("Ticket expired.");
}

IPrincipal user =  (System.Security.Principal.IPrincipal) new RolePrincipal(new FormsIdentity(ticket));
2
Ognyan Dimitrov

Dans Asp.net Mvc Identity 2, vous pouvez obtenir le nom d'utilisateur actuel en:

var username = System.Web.HttpContext.Current.User.Identity.Name;
1
Fereydoon Barikzehy

Dans le IIS Manager, sous Authentification, désactivez: 1) Authentification anonyme 2) Authentification par formulaire

Ajoutez ensuite les éléments suivants à votre contrôleur pour gérer les tests par rapport au déploiement du serveur:

string sUserName = null;
string url = Request.Url.ToString();

if (url.Contains("localhost"))
  sUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
else
  sUserName = User.Identity.Name;
0
Daniel King