[英]What does it mean for a jwt token to expire
我正在實施 jwt 令牌以進行用戶驗證。 每當用戶登錄並將該令牌存儲在我的數據庫中時,我都會簽署 jwt 令牌。 然后,每當用戶想要訪問他們的個人信息時,他們都會向我發送他們的令牌,我檢查數據庫中是否存在此類令牌,如果存在,我允許訪問(如果您知道更好的用戶驗證方法,請推薦)。 問題是,我希望我的令牌每 24 小時過期一次,這意味着我希望數據庫中的令牌每 24 小時成為一個空字符串,但是我做了一些實驗:
const jwt = require('jsonwebtoken')
var token = jwt.sign({d:'tt'}, 'prvateKey', {expiresIn: 1000});
setTimeout(()=>{
console.log(token)
}, 3000)
控制台上面的代碼記錄了實際的令牌,而不是一個空字符串 null 或類似的東西。 那么我的代碼是不是有些錯誤,或者到期是否意味着與我想的不同?
jwt.sign
將令牌作為字符串返回。 這不會在到期時自動變為空,它只是一個字符串。 但是,令牌將變為無效。 您可以使用jwt.verify
方法檢查令牌有效性。 如果令牌無效, jwt.verify
將出錯。
expiresIn
選項便於設置令牌exp
聲明。 這就是 jwt 規范關於此聲明的內容:
“exp”(過期時間)聲明標識了 JWT 不能被接受處理的過期時間或之后。
https://tools.ietf.org/html/rfc7519#section-4.1.4
jsonwebtoken
package 文檔還說:
expiresIn
:以秒或描述時間跨度 zeit/ms 的字符串表示。
https://www.npmjs.com/package/jsonwebtoken#token-expiration-exp-claim
使用jsonwebtoken
package,過期令牌實際上在verify()
function 中進行轉換,在傳遞token
以進行處理時拋出帶有TokenExpiredError
名稱的異常。
var jwt = require("jsonwebtoken")
var data = {
"data": "some data"
}
var secret = "secret"
var token = jwt.sign({ data }, secret, { expiresIn: 1 })
setTimeout(function () {
try {
var payload = jwt.verify(token, secret)
} catch (error) {
console.log(error.name) // output: TokenExpiredError
}
}, 1000)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.