J'ai déjà fait cela avec MVC5 User.Identity.GetUserId()
mais cela ne semble pas fonctionner ici. Le User.Identity
n'a pas la GetUserId()
méthode
j'utilise Microsoft.AspNet.Identity
J'ai déjà fait cela avec MVC5 User.Identity.GetUserId()
mais cela ne semble pas fonctionner ici. Le User.Identity
n'a pas la GetUserId()
méthode
j'utilise Microsoft.AspNet.Identity
System.Web.HttpContext.Current.User.Identity.Name
?Réponses:
Mise à jour dans la version ASP.NET Core> = 2.0
Dans le contrôleur:
Dans une autre classe:
Ensuite, vous devez vous inscrire
IHttpContextAccessor
dans laStartup
classe comme suit:Pour plus de lisibilité, écrivez les méthodes d'extension comme suit:
Puis utilisez comme suit:
la source
null
.User.Identity.Name
, cela peut être dû au fait que l'authentification anonyme est activée. J'ai puUser.Identity.Name
renvoyer mon domaine et mon nom d'utilisateur en développantProperties > launchSettings.json
et en définissantanonymousAuthentication
surfalse
etwindowsAuthentication
verstrue
.Jusqu'à ASP.NET Core 1.0 RC1 :
C'est User.GetUserId () de System.Security.Claims espace de noms .
Depuis ASP.NET Core 1.0 RC2 :
Vous devez maintenant utiliser UserManager . Vous pouvez créer une méthode pour obtenir l'utilisateur actuel:
Et obtenez des informations utilisateur avec l'objet:
Remarque: Vous pouvez le faire sans utiliser une méthode écrivant des lignes simples comme celle-ci
string mail = (await _userManager.GetUserAsync(HttpContext.User))?.Email
, mais cela ne respecte pas le principe de responsabilité unique. Il est préférable d'isoler la façon dont vous obtenez l'utilisateur, car si un jour vous décidez de changer votre système de gestion des utilisateurs, comme utiliser une autre solution que Identity, cela deviendra pénible car vous devrez revoir tout votre code.la source
vous pouvez l'obtenir dans votre contrôleur:
ou écrivez une méthode d'extension comme avant .Core v1.0
et obtenez partout où l'utilisateur ClaimsPrincipal est disponible :
la source
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
Convert.ToInt32(User.FindFirstValue(ClaimTypes.NameIdentifier))
pour obtenir l'entier UserIdJ'ai inclus l'utilisation de System.Security.Claims et j'ai pu accéder à la méthode d'extension GetUserId ()
NB: J'avais déjà utilisé Microsoft.AspNet.Identity mais je n'ai pas pu obtenir la méthode d'extension. Donc je suppose que les deux doivent être utilisés en conjonction l'un avec l'autre
EDIT : Cette réponse est maintenant obsolète. Regardez la réponse de Soren ou d'Adrien pour une façon datée d'y parvenir dans CORE 1.0
la source
var userId = User.GetUserId();
Pour .NET Core 2.0 uniquement Les éléments suivants sont requis pour récupérer l'ID utilisateur de l'utilisateur connecté dans une
Controller
classe:ou
par exemple
la source
Comme indiqué quelque part dans cet article, la méthode GetUserId () a été déplacée vers le UserManager.
Si vous avez démarré un projet vide, vous devrez peut-être ajouter UserManger à vos services dans startup.cs. Sinon, cela devrait déjà être le cas.
la source
vous devez importer Microsoft.AspNetCore.Identity & System.Security.Claims
la source
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"
-ilUser.FindFirstValue(ClaimTypes.NameIdentifier);
?Bien que la réponse d'Adrien soit correcte, vous pouvez tout faire en une seule ligne. Pas besoin de fonction supplémentaire ou de désordre.
Cela fonctionne je l'ai vérifié dans ASP.NET Core 1.0
alors vous pouvez obtenir d'autres propriétés de la variable comme
user.Email
. J'espère que ça aidera quelqu'un.la source
Pour ASP.NET Core 2.0, Entity Framework Core 2.0, Api AspNetCore.Identity 2.0 ( https://github.com/kkagill/ContosoUniversity-Backend ):
Le a
Id
été changé enUser.Identity.Name
Réponse:
la source
this.User.Identity.Name
tendance à être le nom d'utilisateur. Lors de mon test, le nom d'utilisateur est un e-mail, que l'utilisateur se connecte depuis l'inscription ou se connecte depuis une connexion externe (par exemple, Facebook, Google). Le code suivant renvoie le userId. J'utilise une clé primaire auto-incrémentée pour ma table d'utilisateur d'identité, d'où le int.Parse.int userId = int.Parse(this.User.FindFirstValue(ClaimTypes.NameIdentifier));
FindByIdAsync
ne fonctionne pas car vous fournissez un nom d'utilisateur. Cela fonctionne lorsque vous le remplacez parFindByNameAsync
.dans le
APiController
Quelque chose comme ça, vous obtiendrez les réclamations
la source
User.Identity.GetUserId ();
n'existe pas dans asp.net identity core 2.0. à cet égard, j'ai géré de manière différente. J'ai créé une classe commune pour toute l'application d'utilisation, en raison de l'obtention d'informations sur l'utilisateur.
créer une classe commune PCommon & interface IPCommon ajoutant une référence
using System.Security.Claims
Voici l'implémentation de la classe commune
obtenir l'ID utilisateur et le nom dans l'action d'insertion
Merci, Maksud
la source
Pour obtenir l'ID utilisateur actuel dans les vues rasoir, nous pouvons injecter UserManager dans la vue comme ceci:
J'espère que tu trouves cela utile.
la source
l'utilisation peut utiliser
pour une raison quelconque, NameIdentifier récupère maintenant le nom d'utilisateur (.net core 2.2)
la source
En tant qu'administrateur travaillant sur le profil d'autres personnes et que vous devez obtenir l'ID du profil sur lequel vous travaillez, vous pouvez utiliser un ViewBag pour capturer l'ID, par exemple ViewBag.UserId = userId; while userId est la chaîne Paramètre de la méthode sur laquelle vous travaillez.
la source
Si vous le souhaitez dans ASP.NET MVC Controller, utilisez
Vous devez ajouter une
using
déclaration car vousGetUserId()
ne serez pas là sans elle.la source
User.GetUserId()
et nonUser.Identity.GetUserId()