我已经在我的节点应用程序中使用jsonwebtoken
进行令牌验证。这里jwt.sign
工作正常。但是当jwt.verify
出现以下错误时
“授权”:假,“消息”:{“名称”:“JsonWebToken错误”,“消息”:“无效标记”} }
这是我的Post和Get路由器
router.post('/signup',(req,res)=>{
const body = _.pick(req.body,['username','email_id','name','college','password','dob','gender','city','joinedOn','bio']);
User.findOne({'username':body.username},function(err,user){
if(err){
res.status(404).send(err)
}else if(user){
res.status(404).send('User with Username Exists')
}else{
var user = new User(body);
user.save().then((user) => {
var token = jwt.sign({ username: user.username},'secret', {
"algorithm": "HS256",
expiresIn: 86400 // expires in 24 hours
});
res.status(200).send({ auth: true, token: token });
}, (e) => {
res.status(400).send(e)
})
}
})
});
router.get('/me', VerifyToken, function(req, res) {
User.findOne({username:req.username}, function (err, user) {
if (err) return res.status(500).send(err);
if (!user) return res.status(404).send("No user found.");
res.status(200).send(user);
});
});
下面是verifyToken函数
function verifyToken(req, res, next) {
var token = req.headers['x-access-token'];
if (!token)
return res.status(403).send({ auth: false, message: 'No token provided.' });
console.log(token)
jwt.verify(token,'secret', function(err, decoded) {
if (err)
return res.status(500).send({ auth: false, message: err });
//req.username = decoded.username;
console.log(decoded)
next();
});
}
我不知道我的程序出了什么问题。如有任何建议,我将不胜感激。谢谢
6条答案
按热度按时间nx7onnlm1#
如果您正在向jwt.verify函数传递一个令牌,例如
Bearer *************....
,请确保在将其传递给jwt之前先拆分该令牌,方法是执行const token = req.headers.authorization.split(' ')[1]; jwt.verify(token)
希望这能帮到什么人。
bxgwgixi2#
我的代码是真的。我犯的错误是在Postman中使用**双引号("token")**提供访问令牌。这就是为什么Postman给我以下错误
"授权":假,"消息":{"名称":" JsonWebToken错误","消息":"无效标记"}}
piwo6bdm3#
我也遇到了同样的问题。基本上令牌不应该有更多的信息。当我把它剥离出来时,它开始按预期工作。
例如:
使用
brearer *************....
时失败使用
*************....
时有效8e2ybdfx4#
我遇到过类似的错误,因为我使用
JSON.stringify
将令牌持久化在localStorage中,这会给令牌添加两个双引号,因此在验证它时会导致无效的令牌。解决方案,请忽略
JSON.stringify
,或在验证时解析令牌:f3temu5u5#
mwg9r5ms6#
当你从服务传递令牌时,从本地存储转换为JSON.parse(token),然后传递以验证