【问题标题】:Getting Current User in Controller在控制器中获取当前用户
【发布时间】:2022-01-20 17:43:55
【问题描述】:

希望有人可以帮助我。我正在尝试在帐户控制器中创建更改密码发布请求,但我的用户总是返回 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);

【问题讨论】:

标签: c# asp.net-core asp.net-identity change-password


【解决方案1】:

您可以使用 UserManager 获取控制器中的当前用户 ID,例如:

ASP.NET 核心 >= 2.0

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

Name 使用:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-19
    • 2014-10-17
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 2023-03-21
    • 2020-06-11
    相关资源
    最近更新 更多