Pour obtenir l'utilisateur actuellement connecté dans MVC5, il nous suffisait de faire ce qui suit
using Microsoft.AspNet.Identity;
[Authorize]
public IHttpActionResult DoSomething() {
string currentUserId = User.Identity.GetUserId();
}
Maintenant, avec ASP.NET Core, je pensais que cela devrait fonctionner, mais une erreur se produit.
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Http;
private readonly UserManager<ApplicationUser> _userManager;
[HttpPost]
[Authorize]
public async Task<IActionResult> StartSession() {
var curUser = await _userManager.GetUserAsync(HttpContext.User);
}
Des idées ?
EDITAR: La réponse de Gerardo est pertinente, mais pour obtenir l'"Id" réel de l'utilisateur, ceci semble fonctionner :
ClaimsPrincipal currentUser = this.User;
var currentUserID = currentUser.FindFirst(ClaimTypes.NameIdentifier).Value;
0 votes
Quelle est votre question exactement ?
0 votes
Vous n'avez besoin que de l'identité ? J'ai modifié ma réponse pour ajouter comment l'obtenir en utilisant la méthode plus sophistiquée _userManager.GetUserId(User).
0 votes
Oui, principalement j'ai besoin de l'Id de la table AspNetUsers, ou de la session. currentUser.FindFirst(ClaimTypes.NameIdentifier).Value donne l'Id en utilisant Claims. Cela fonctionne aussi avec UserManager ! Merci Gerardo ! Est-ce qu'une méthode est plus efficace que l'autre ?
0 votes
UserManager effectue en interne .FindFirst(ClaimTypes.NameIdentifier). Les performances sont donc les mêmes. Je préfère l'encapsulation du UserManager pour la facilité de lecture. D'un autre côté
.GetUserAsync()
est plus lent parce qu'il va vers la BD.0 votes
Je suis tout à fait d'accord, Gerardo. Je vous remercie.