gpt4 book ai didi

c# - ASP.NET Core Identity - 获取当前用户

转载 作者:IT王子 更新时间:2023-10-29 03:46:48 26 4
gpt4 key购买 nike

要在 MVC5 中获取当前登录的用户,我们所要做的就是:

using Microsoft.AspNet.Identity;
[Authorize]
public IHttpActionResult DoSomething() {
string currentUserId = User.Identity.GetUserId();
}

现在,对于 ASP.NET Core,我认为这应该可行,但它会引发错误。

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);
}

有什么想法吗?

编辑: Gerardo 的响应是正确的,但要获取用户的实际“Id”,这似乎可行:

ClaimsPrincipal currentUser = this.User;
var currentUserID = currentUser.FindFirst(ClaimTypes.NameIdentifier).Value;

最佳答案

如果您的代码在 MVC Controller 中:

public class MyController : Microsoft.AspNetCore.Mvc.Controller

Controller 基类,您可以从User 属性中获取ClaimsPrincipal

System.Security.Claims.ClaimsPrincipal currentUser = this.User;

您可以直接检查声明(无需往返数据库):

bool isAdmin = currentUser.IsInRole("Admin");
var id = _userManager.GetUserId(User); // Get user id:

其他字段可以从数据库的用户实体中获取:

  1. 使用依赖注入(inject)获取用户管理器

    private UserManager<ApplicationUser> _userManager;

    //class constructor
    public MyController(UserManager<ApplicationUser> userManager)
    {
    _userManager = userManager;
    }
  2. 并使用它:

    var user = await _userManager.GetUserAsync(User);
    var email = user.Email;

如果您的代码是一个服务类,您可以使用依赖注入(inject)来获取一个IHttpContextAccessor,它可以让您从 HttpContext 获取User .

    private IHttpContextAccessor _httpContextAccessor;

public MyClass(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}

private void DoSomething()
{
var user = _httpContextAccessor.Context?.User;
}

关于c# - ASP.NET Core Identity - 获取当前用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38751616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com