在控制器中获取当前用户
Getting Current User in Controller
希望有人能帮我解决这个问题。我正在尝试在帐户控制器中创建更改密码 Post 请求,但我的用户始终返回 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 在您的控制器中获取当前用户 ID,例如:
ASP.NET 核心 >= 2.0
var currentUserId = User.FindFirstValue(ClaimTypes.NameIdentifier);
或Name
使用:
var currentUserId = User.FindFirstValue(ClaimTypes.Name);
如果你想在其他 class 中获取当前用户,你可以使用 IHttpContextAccessor
,将其传递到 class 的构造函数并使用 HttpContext
访问 User
希望有人能帮我解决这个问题。我正在尝试在帐户控制器中创建更改密码 Post 请求,但我的用户始终返回 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 在您的控制器中获取当前用户 ID,例如:
ASP.NET 核心 >= 2.0
var currentUserId = User.FindFirstValue(ClaimTypes.NameIdentifier);
或Name
使用:
var currentUserId = User.FindFirstValue(ClaimTypes.Name);
如果你想在其他 class 中获取当前用户,你可以使用 IHttpContextAccessor
,将其传递到 class 的构造函数并使用 HttpContext
访问 User