Comment obtenir le courant de l'utilisateur connecté Id dans ASP.NET de Base
Je l'ai fait avant avec MVC5 à l'aide de User.Identity.GetUserId()
mais cela ne semble pas fonctionner ici.
Le User.Identity
n'ont pas le GetUserId()
méthode
Je suis en utilisant Microsoft.AspNet.Identity
- essayez cette
System.Web.HttpContext.Current.User.Identity.Name
? - Merci @PravinDeshmukh mais qui renvoie le nom de l'utilisateur et pas l'id
- Il devrait fonctionner. Voir les exemples dans asp.net github.com/aspnet/Identity/blob/.... Juste assurez-vous que l'utilisateur est connecté. @PravinDeshmukh, ne jamais utiliser de Système.Web.HttpContext.Courant dans vnext 🙂
- Salut @user960567, pouvez-vous nous dire pourquoi ?
- car il ne fonctionnera pas sur .NET de base et il n'y a pas de Système.Web de dépendance.
- J'ai montré le code que j'ai utilisé qui fonctionne généralement à l'utilisateur (nom d'Utilisateur.L'identité.GetUSerId()) et a déclaré que la méthode d'extension GetUserId() n'existe plus, même quand je suis à l'aide de Microsoft.AspNet.L'identité. Je ne sais pas plus ce que je pourrais avoir dit. De toute façon, j'ai trouvé que j'avais besoin d'inclure également "à l'aide du Système.De sécurité.Les revendications" pour obtenir l'extension de la méthode(du moins pour le moment dans vNext)
Vous devez vous connecter pour publier un commentaire.
Jusqu'ASP.NET Core 1.0 RC1 :
Utilisateur.GetUserId() à partir de Système.De sécurité.Les revendications espace de noms.
Depuis ASP.NET Core 1.0 RC2 :
Vous devez maintenant utiliser UserManager.
Vous pouvez créer une méthode pour obtenir de l'utilisateur actuel :
Et d'obtenir des informations de l'utilisateur avec l'objet :
Remarque :
Vous pouvez le faire sans l'aide d'une méthode d'écriture des lignes simples, comme cette
string mail = (await _userManager.GetUserAsync(HttpContext.User))?.Email
, mais il 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 l'utilisation d'une autre solution que l'Identité, il va devenir pénible depuis que vous avez à examiner l'ensemble de votre code.vous pouvez l'obtenir dans votre contrôleur:
ou écrire une extension de la méthode comme avant .Core v1.0
et obtenir partout où l'utilisateur ClaimsPrincipal est disponible :
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
Mise à jour dans ASP.NET de Base 2.1 et 2.2:
Dans le Contrôleur:
Dans certains autres de la classe:
Vous devriez l'inscrire
IHttpContextAccessor
dans leStartup
classe comme suit:null
.User.Identity.Name
, il pourrait être parce que l'Authentification Anonyme est activée. J'ai été en mesure d'obtenirUser.Identity.Name
de retour pour mon domaine et le nom d'utilisateur par l'expansion deProperties > launchSettings.json
, et la miseanonymousAuthentication
àfalse
, etwindowsAuthentication
àtrue
.J'ai inclus l'utilisation du Système.De sécurité.Les revendications et j'ai pu accéder à la GetUserId() la méthode d'extension
NB: j'ai eu l'aide de Microsoft.AspNet.Identité déjà, mais n'a pas pu obtenir la méthode d'extension. Donc je suppose que les deux d'entre eux doivent être utilisés en conjonction avec un autre
MODIFIER:
Cette réponse est aujourd'hui obsolète. Regardez Soren ou Adrien de réponse datée du chemin de la réalisation de cet CORE 1.0
var userId = User.GetUserId();
Pour .NET Core 2.0 Uniquement Les éléments suivants sont nécessaires pour récupérer l'Identifiant de l'Utilisateur connecté dans un
Controller
classe:ou
par exemple
Comme indiqué quelque part dans ce post, la GetUserId() la méthode a été déplacé vers le UserManager.
Si vous avez commencé un projet vide, vous pourriez avoir besoin d'ajouter de la UserManger à vos services en démarrage.cs. Sinon, cela devrait déjà être le cas.
Bien qu'Adrien la réponse est correcte, vous pouvez faire tout cela en ligne. Pas besoin de fonctions supplémentaires ou de désordre.
Il fonctionne, j'ai vérifié dans ASP.NET Core 1.0
ensuite, vous pouvez obtenir d'autres propriétés de la variable comme
user.Email
. J'espère que cela aide quelqu'un.Pour ASP.NET Core 2.0, Entity Framework Core 2.0, AspNetCore.Identité 2.0 de l'api (https://github.com/kkagill/ContosoUniversity-Backend):
La
Id
a été changé pourUser.Identity.Name
Réponse:
this.User.Identity.Name
tend à être le nom d'utilisateur si. Lors de mon essai, le nom d'utilisateur est un e-mail, l'utilisateur ouvre une session d'enregistrement ou de journaux à partir externes de connexion (par exemple, Facebook, Google). Code suivant renvoie le nom d'utilisateur. J'utilise un auto-incrémenté clé primaire de mon identité de l'utilisateur table, d'où l'int.L'analyser.int userId = int.Parse(this.User.FindFirstValue(ClaimTypes.NameIdentifier));
FindByIdAsync
ne fonctionne pas comme vous êtes en fournissant un nom d'utilisateur. Il fonctionne lorsque vous le remplacer parFindByNameAsync
.vous devez importer Microsoft.AspNetCore.Identité & Système.De sécurité.Les revendications
dans le
APiController
Quelque chose comme cela, vous pouvez obtenir les revendications
De l'utilisateur.L'identité.GetUserId();
n'existe pas dans asp.net l'identité core 2.0. à cet égard, j'ai géré de manière différente. j'ai créé une classe commune pour l'utilisation de l'application complète, en raison de l'obtention des informations de l'utilisateur.
créer une classe commune PCommon & interface IPCommon
ajouter la référence
using System.Security.Claims
Ici la mise en œuvre de la classe commune
obtenir l'id utilisateur et le nom de l'insert d'action
Grâce,
Maksud
utiliser pouvez utiliser
pour quelque raison NameIdentifier maintenant récupérer le nom d'utilisateur (.net de base 2.2)
Si vous voulez que ce dans la ASP.NET MVC Contrôleur, utilisez
Vous devez ajouter
using
instruction, carGetUserId()
ne sera pas là sans elle.User.GetUserId()
et pasUser.Identity.GetUserId()