Comment obtenir l'utilisateur actuel asp.net noyau

Je veux obtenir l'utilisateur actuel pour obtenir des informations d'utilisateur telles que l'email. Mais je ne peux pas le faire en asp.net noyau.Je suis tellement confus C'est mon code.

HttpContext est presque nulle dans constructeur de contrôleur. Ce n'est pas bon d'obtenir l'utilisateur dans chaque action.Je veux obtenir des informations sur l'utilisateur une fois et les mettre dans ViewData;

    public DashboardController()
    {
        var user = HttpContext.User.GetUserId();
   }
49
demandé sur Kirk 2016-04-15 10:54:08

6 réponses

User.FindFirst(ClaimTypes.NameIdentifier).Value

Modifier pour le constructeur

Ci-dessous code fonctionne:

public Controller(IHttpContextAccessor httpContextAccessor)
{
    var userId = httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value 
}

Modifier pour la RTM

, vous devriez Vous inscrire IHttpContextAccessor:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    }
88
répondu adem caglin 2016-08-14 14:44:05

Moyen Simple qui fonctionne et j'ai vérifié.

var user = await _userManager.GetUserAsync(HttpContext.User);

Ensuite, vous pouvez toutes les propriétés de ces variables comme user.Email. J'espère que cela aidera quelqu'un.

22
répondu Ahmad 2017-02-27 18:24:15

Avoir une autre façon d'obtenir l'utilisateur actuel Asp.NET Core-et je pense que je l'ai vu quelque part ici, sur SO ^ ^

// Stores UserManager
private readonly UserManager<ApplicationUser> _manager; 

// Inject UserManager using dependency injection.
// Works only if you choose "Individual user accounts" during project creation.
public DemoController(UserManager<ApplicationUser> manager)  
{  
    _manager = manager;  
}

// You can also just take part after return and use it in async methods.
private async Task<ApplicationUser> GetCurrentUser()  
{  
    return await _manager.GetUserAsync(HttpContext.User);  
}  

// Generic demo method.
public async Task DemoMethod()  
{  
    var user = await GetCurrentUser(); 
    string userEmail = user.Email; // Here you gets user email 
    string userId = user.Id;
}  

CE code va au contrôleur nommé DemoController. Ne fonctionnera pas sans les deux await (ne compilera pas);)

16
répondu Hekkaryk 2018-09-09 20:39:03

Il semblerait qu'à partir de Maintenant (avril de 2017) que les travaux suivants:

public string LoggedInUser => User.Identity;

Au moins dans un Controller

10
répondu Grandizer 2017-04-18 15:10:45

Mon problème était d'accéder à L'utilisateur connecté en tant qu'objet dans le fichier cshtml. Considérant que vous vouliez l'utilisateur dans ViewData, cette approche pourrait être utile:

Dans le fichier cshtml

@using Microsoft.AspNetCore.Identity
@inject UserManager<ApplicationUser> UserManager

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>
    @UserManager.FindByNameAsync(UserManager.GetUserName(User)).Result.Email
    </title>
  </head>
  <body>

  </body>
</html>
2
répondu MikeMajara 2018-05-02 12:52:48

J'ai ma solution

var claim = HttpContext.User.CurrentUserID();

public static class XYZ
{
    public static int CurrentUserID(this ClaimsPrincipal claim)
    {
        var userID = claimsPrincipal.Claims.ToList().Find(r => r.Type == 
         "UserID").Value;
        return Convert.ToInt32(userID);
    }
    public static string CurrentUserRole(this ClaimsPrincipal claim)
    {
        var role = claimsPrincipal.Claims.ToList().Find(r => r.Type == 
        "Role").Value;
        return role;
    }
}
-1
répondu neeraj rai 2018-05-10 16:55:07