【发布时间】: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);
【问题讨论】:
-
这非常有效。非常感谢,真不敢相信它这么简单,这有效 var currentUserId = this.User.FindFirstValue(ClaimTypes.NameIdentifier);
-
如果您可以将其发布为结束此问题的答案?非常感谢@JamesS
标签: c# asp.net-core asp.net-identity change-password