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)
})
})
}
它的承诺是基于的。现在,您只需将令牌传递给它解析为 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();
}
添加回答
举报