[英]Displaying User Information after Authentication in ASP.NET Core
我已經使用JWT令牌實現了Identity,並使用[Authorize]
屬性保護了路由。 這很好。 關於如何使用JWT和Identity保護路由的教程,有幾本,但是我找不到如何讓特定用戶僅在經過身份驗證后才訪問他們自己的內容的任何教程。
到目前為止,我已經做到了:
[Authorize]
[HttpGet("protected")]
public async Task<string> ProtectedArea()
{
var userName = User.Identity.Name;
var user = repository.GetUserByEmail(userName);
//var user2 = _userManager.FindByIdAsync(userName); //user2.id gives null reference error
return User.Bio;
}
在這里, GetUserByEmail
是通過查詢數據庫返回User對象的簡單方法(我無法讓UserManager
在這里工作,也無法使用FindByEmailAsync
返回User,因為它將拋出空引用異常)
這是我的claims
:
var claims = new List<Claim>
{
new Claim(JwtRegisteredClaimNames.Sub, email),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
new Claim(JwtRegisteredClaimNames.UniqueName, user.UserName),
new Claim(JwtRegisteredClaimNames.NameId, user.Id.ToString())
};
那么,從令牌中識別用戶然后繼續顯示該用戶信息的標准方法是什么? 我在上面所做的事情對我來說似乎有點棘手,但這是正確的方法嗎? 另外,我是否需要對每條路線進行檢查並通過方法獲取用戶ID,或者是否也可以通過某些屬性來獲取用戶ID?
任何幫助將不勝感激。
使用UserManager
失敗的原因是因為您試圖通過id( FindByIdAsync
)獲取用戶,但是將用戶名提供為“ id”。 那將永遠不會匹配,因此不會返回任何用戶,並且您的變量為null。 如果您只是使用FindByNameAsync
代替,那就可以了。
但是,實際上有一個更簡單的方法:
var user = await _userManager.GetUserAsync(User);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.