Je viens de passer à la nouvelle version 2.0 d'Identity Framework. Dans la version 1.0, je pouvais obtenir un objet utilisateur en utilisant manager.FindByIdAsync(User.Identity.GetUserId())
. La méthode GetUserId()
ne semble pas exister dans la version 2.0.
Maintenant, tout ce que je peux comprendre, c’est d’utiliser manager.FindByEmailAsync(User.Identity.Name)
, qui référence le champ nom d’utilisateur dans la table users. Dans mon application, ce paramètre est identique à celui du champ de courrier électronique.
Je peux voir que cela cause des problèmes plus tard lorsque quelqu'un doit mettre à jour son courrier électronique. Existe-t-il un moyen d'obtenir que l'objet utilisateur actuellement connecté soit basé sur une valeur immuable (comme le champ id) dans Identity 2.0 Framework?
GetUserId()
est une méthode d'extension sur IIdentity
et elle se trouve dans Microsoft.AspNet.Identity.IdentityExtensions
. Assurez-vous d'avoir ajouté l'espace de noms avec using Microsoft.AspNet.Identity;
.
Pour obtenir CurrentUserId dans Asp.net Identity 2.0, importez d'abord Microsoft.AspNet.Identity
:
C #:
using Microsoft.AspNet.Identity;
VB.NET:
Imports Microsoft.AspNet.Identity
Et appelez ensuite User.Identity.GetUserId()
où vous voulez:
strCurrentUserId = User.Identity.GetUserId()
Cette méthode renvoie l'ID utilisateur actuel en tant que type de données défini pour l'ID utilisateur dans la base de données (la valeur par défaut est String
).
Juste au cas où vous êtes comme moi et que le champ Id de l’entité utilisateur est un Int ou autre chose qu’une chaîne,
using Microsoft.AspNet.Identity;
int userId = User.Identity.GetUserId<int>();
va faire l'affaire
J'ai eu le même problème. J'utilise actuellement Asp.net Core 2.2. J'ai résolu ce problème avec le code suivant.
using Microsoft.AspNetCore.Identity;
var user = await _userManager.FindByEmailAsync(User.Identity.Name);
J'espère que cela sera utile à quelqu'un.