2 回答

TA貢獻1799條經驗 獲得超6個贊
假設您使用的是?jsonwebtoken,則缺少“secret”字符串。
根據文檔,你應該這樣做。
創建令牌時:
var jwt = require('jsonwebtoken');
var token = jwt.sign({ foo: 'bar' }, 'shhhhh');
您還可以傳遞過期時間:
jwt.sign({
? data: 'foobar'
}, 'secret', { expiresIn: 60 * 60 });
用于驗證:
有幾種方法可以做到這一點。但是您應該需要相同的秘密字符串來驗證您用于登錄的信息。此外,您還需要為 jwt.verify 分配一個變量或通過回調調用它,以便訪問解碼的數據,例如用戶 ID 等。
// verify a token symmetric - synchronous
var decoded = jwt.verify(token, 'shhhhh');
console.log(decoded.foo) // bar
// verify a token symmetric
jwt.verify(token, 'shhhhh', function(err, decoded) {
? console.log(decoded.foo) // bar
});
// invalid token - synchronous
try {
? var decoded = jwt.verify(token, 'wrong-secret');
} catch(err) {
? // err
}
// invalid token
jwt.verify(token, 'wrong-secret', function(err, decoded) {
? // err
? // decoded undefined
});

TA貢獻2019條經驗 獲得超9個贊
創建一個名為“verifyToken”的新函數
我建議答應一下。async所以你可以在函數中結合使用它await
function verifyToken(token){
return new Promise((res, err) => {
jwt.verify(token, "secret key", (err) => {
if (err) rej(err)
res(true)
})
})
}
它的承諾是基于的?,F在,您只需將令牌傳遞給它解析為 true 或 false 的函數即可:
module.exports = async (req, res, next) => {
let token = req.headers.authorization.split(" ")[1];
try {
await verifyToken(token);
console.log("ok")
}catch (e) {
res.status(403)
}
next();
}
添加回答
舉報