这是我第一次用NPM jsonwebtoken使用JWT,下面是我的代码:
//create a token for user
const token = jwt.sign({ _id: user._id, email:user.email }, 'secret', { issuer:'Dio', expiresIn: '1h' })
//get the token from req.header
const token = req.header('Authorization').replace('Bearer ', '')
jwt.verify(token, "secret", (err, decode)=>{
try{
console.log(decode);
}catch(err){
console.log(err);
}
})
当身份验证失败时,总是打印出">undefined,
。然后我尝试其他方法:
jwt.verify(token, "secret", (err, decode)=>{
if(err){
console.log(err);
}else{
console.log(decode);
}
})
当令牌正确时,可以正常工作,否则我会得到错误消息,如:
JsonWebTokenError: invalid token
或
SyntaxError: Unexpected token ȗ in JSON at position 0
但是我希望我能得到npm文档中显示的信息,例如:
err = {
name: 'TokenExpiredError',
message: 'jwt expired',
expiredAt: 1408621000
}
代码块1
Try catch不是这样工作的。没有错误,所以它永远不会出现在catch语句中。回调只是函数。这里它接受两个参数,其中没有未捕获或捕获的异常或错误。
所以它总是打印console.log(decode);
,它将是undefined因为您有一个无效或过期的令牌。
代码块2
应该打印错误。这里的语法无效(if后面缺少{
),这就是异常的原因。
jwt.verify(olderToken, "lololol", (err, decode) => {
if (err) {
console.log(err);
} else {
console.log(decode);
}
})