Comment obtenir l'utilisateur actuel dans ASP.NET MVC
-
06-07-2019 - |
Question
Dans un modèle de formulaire, je récupérais l'utilisateur actuellement connecté en:
Page.CurrentUser
Comment obtenir l'utilisateur actuel dans une classe de contrôleur dans ASP.NET MVC?
La solution
Si vous avez besoin d'obtenir l'utilisateur depuis le contrôleur, utilisez la propriété Utilisateur
de Controller. Si vous en avez besoin dans la vue, je renseignerais ce dont vous avez spécifiquement besoin dans ViewData ??code>, ou vous pouvez simplement appeler User car je pense que c'est une propriété de
ViewPage
.
Autres conseils
J'ai constaté que utilisateur
fonctionnait, c'est-à-dire utilisateur.identité.nom
ou utilisateur.IsInRole (" administrateur &);
.
Essayez HttpContext.Current.User
.
Propriété partagée publique Current () As System.Web.HttpContext
Membre de System.Web.HttpContextRésumé:
Obtient ou définit l'objet System.Web.HttpContext pour la requête HTTP actuelle.Valeurs de retour:
Le System.Web.HttpContext pour le courant Requête HTTP
Vous pouvez obtenir le nom de l'utilisateur dans ASP.NET MVC4 comme suit:
System.Web.HttpContext.Current.User.Identity.Name
Je me rends compte que c'est vraiment vieux, mais je commence tout juste à utiliser ASP.NET MVC, alors j'ai décidé de mettre mes deux sous:
-
Request.IsAuthenticated
vous indique si l'utilisateur est authentifié. -
Page.User.Identity
vous donne l'identité de l'utilisateur connecté.
j'utilise:
Membership.GetUser().UserName
Je ne suis pas sûr que cela fonctionnera dans ASP.NET MVC, mais cela en vaut la peine:)
se connecter nom d'utilisateur: System.Web.HttpContext.Current.User.Identity.Name
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 la base de données en premier et Entity Framework 5 pour générer des liaisons avec le code en premier et vos tables sont structurés de manière à ce qu'une clé étrangère à l'ID utilisateur soit utilisée), vous pouvez utiliser
WebSecurity.CurrentUserId
une fois que vous ajoutez une instruction using
using System.Web.Security;
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();
Cette page pourrait être ce que vous cherchez:
Utilisation de Page.User.Identity.Name dans MVC3
Vous avez simplement besoin de User.Identity.Name
.
Utilisez System.Security.Principal.WindowsIdentity.GetCurrent (). Name
.
Ceci obtiendra l'utilisateur Windows actuellement connecté.
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'
Pour ce que cela vaut, dans ASP.NET MVC 3, vous pouvez simplement utiliser Utilisateur qui renvoie l'utilisateur pour la requête en cours.
Si vous vous trouvez dans votre page de connexion, dans l'é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);
IPrincipal currentUser = HttpContext.Current.User;
bool writeEnable = currentUser.IsInRole("Administrator") ||
...
currentUser.IsInRole("Operator");
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));
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 changements et de patience. Depuis lors, 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 répertoire actif lorsque votre application ASP.NET MVC s'exécute sur un serveur Web 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 de répertoire actif" 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 emprunter l'identité
sur true dans votre fichier Web.config:
<system.web>
<identity impersonate="true" />
Vous devez avoir l'authentification Windows dans web.config:
<authentication mode="Windows" />
Vous pouvez utiliser le code suivant:
Request.LogonUserIdentity.Name;
Dans Asp.net Mvc Identity 2, vous pouvez obtenir le nom d'utilisateur actuel en:
var username = System.Web.HttpContext.Current.User.Identity.Name;
Dans le gestionnaire IIS, 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;