[英]How to get user id using jwt token
我試圖從 JWT 令牌中獲取用戶 ID。 我得到了一個 JWT 令牌並成功驗證了它,但它沒有返回 ID。
當我解碼 JWT 時:
const decoded = jwt.verify(token, config.get('jwtPrivateKey'));
var userId = decoded.id
console.log(decoded)
我得到了這個輸出:
{ iat: 1561463667 }
但我排除了這個輸出:
id :"*****************"
如何從令牌中獲取用戶 ID?
當整個輸出為{ iat: 1561463667 }
,這意味着在簽名令牌時沒有添加額外的有效負載/聲明。 jsonwebtoken 包通常會添加iat
(issuedAt ,令牌發出的時間)作為默認聲明。
簡而言之:您只能解碼之前添加的聲明。
要添加更多聲明,請嘗試以下代碼(當您控制發出令牌的代碼時):
let payload = { "id" : "1"};
let token = jwt.sign( payload,'secret', { noTimestamp:true, expiresIn: '1h' });
在這里,我添加了一個到期時間 ( exp
) ,並設置了選項noTimestamp
以抑制自動添加的iat
聲明。
結果如下所示:
{
"id": "1",
"exp": 1561471747
}
和令牌:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEiLCJleHAiOjE1NjE0NzI0MzV9.jmKyITRoxLl0fy0-rrwgPOA_iRgGQu8W4Cc6dPupOMA
然后你可以得到你在問題中已經顯示的 id:
const decoded = jwt.verify(token, "your secret or key");
var userId = decoded.id
console.log(userId)
您還可以將上面顯示的 JWT 或您的令牌粘貼到https://jwt.io調試器中,以檢查令牌並查看結構和實際聲明名稱。 也許沒有id
,而是userId
或類似的,或者sub
claim ,這是一個注冊的聲明名稱,用於識別主體:
“sub”(主題)聲明標識作為 JWT 主題的主體。
也可能發生,令牌包含嵌套對象,例如:
{
"user_data":
{
"user_id": "1",
"user_name: "superuser"
},
"exp": 1561471747
}
然后你可以通過這種方式獲得 user_id:
const decoded = jwt.verify(token, "your secret or key");
var userId = decoded.user_data.user_id
console.log(userId)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.