繁体   English   中英

在 Controller 中获取当前用户

[英]Getting Current User in Controller

希望有人可以帮助我。 我正在尝试在帐户 controller 中创建更改密码发布请求,但我的用户总是返回 null。 我是 .NET 的新手,有人可以帮我找出检索当前用户 ID 的最佳方法吗? 这是我到目前为止的代码。

[HttpPost("changePassword")]
    public async Task<ActionResult<ChangePasswordDTO>> ChangePassword([FromBody] ChangePasswordDTO changePassword) {

        var currentUserId = User.Claims.ToList()
        .FirstOrDefault(x => x.Type == "").Value;

         var user = await _userManager.FindByIdAsync(currentUserId);

        var result = await _userManager.ChangePasswordAsync(user, changePassword.Password, changePassword.NewPassword);

        if (result.Succeeded) {
            return Ok("Password changed succesfully");
        } else return Unauthorized("An error occurred while attempting to change password");


    }

当然,当我将“currentUserId”更改为硬编码值时,一切正常。 每个用户都有一个生成的 jwt 令牌,其中包含他的姓名、ID、角色等。我不确定如何继续,我尝试的所有操作都将用户检索为 null。 如果您需要额外的信息,请告诉我,我对这一切都很陌生,感谢我能得到的任何帮助,谢谢!

解决方案

JamesS 为我指出了正确的方向,这段代码有效:

var currentUserId =this.User.FindFirstValue(ClaimTypes.NameIdentifier);

您可以使用 UserManager 在 controller 中获取当前用户 ID,例如:

ASP.NET 核心 >= 2.0

var currentUserId = User.FindFirstValue(ClaimTypes.NameIdentifier);

Name使用:

var currentUserId = User.FindFirstValue(ClaimTypes.Name);

如果你想在其他一些 class 中获取当前用户,你可以使用IHttpContextAccessor ,将它传递给类的构造函数并使用HttpContext来访问User

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM