希望有人可以幫助我。我正在嘗試在帳戶控制器中創建更改密碼發布請求,但我的用戶總是回傳 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);
uj5u.com熱心網友回復:
您可以使用 UserManager 獲取控制器中的當前用戶 ID,例如:
ASP.NET 核心 >= 2.0
var currentUserId = User.FindFirstValue(ClaimTypes.NameIdentifier);
或Name使用:
var currentUserId = User.FindFirstValue(ClaimTypes.Name);
如果要在其他類中獲取當前用戶,可以使用IHttpContextAccessor,將其傳遞給類的建構式并使用HttpContext來訪問User
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/416844.html
標籤:
