簡體   English   中英

如何使用 jwt 令牌獲取用戶 ID

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM