我真的对这个错误感到困惑。我无法弄清楚发生了什么。我正在尝试做的是验证令牌。
const jwt = require("jsonwebtoken");
jwt.verify(token, config.get("jwtSecret"), (err, decoded) => {
if (err) {
console.log(err);
return res.status(401).json({ msg: "Token is not valid" });
} else {
console.log(decoded);
req.user = decoded.user;
next();
}
})
错误是
SyntaxError: Unexpected token . in JSON at position 30
at JSON.parse (<anonymous>)
at Object.jwsDecode [as decode] (C:\Users\kira\Desktop\repo\dev_connector\node_modules\jws\lib\verify-stream.js:71:20)
at module.exports (C:\Users\kira\Desktop\repo\dev_connector\node_modules\jsonwebtoken\decode.js:5:21)
at Object.module.exports [as verify] (C:\Users\kira\Desktop\repo\dev_connector\node_modules\jsonwebtoken\verify.js:69:20)
at module.exports (C:\Users\kira\Desktop\repo\dev_connector\middlewares\auth.js:11:7)
at Layer.handle [as handle_request] (C:\Users\kira\Desktop\repo\dev_connector\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\kira\Desktop\repo\dev_connector\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\kira\Desktop\repo\dev_connector\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\kira\Desktop\repo\dev_connector\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\kira\Desktop\repo\dev_connector\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\Users\kira\Desktop\repo\dev_connector\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\kira\Desktop\repo\dev_connector\node_modules\express\lib\router\index.js:275:10)
at Function.handle (C:\Users\kira\Desktop\repo\dev_connector\node_modules\express\lib\router\index.js:174:3)
at router (C:\Users\kira\Desktop\repo\dev_connector\node_modules\express\lib\router\index.js:47:12)
at Layer.handle [as handle_request] (C:\Users\kira\Desktop\repo\dev_connector\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (C:\Users\kira\Desktop\repo\dev_connector\node_modules\express\lib\router\index.js:317:13)
在我追踪代码之后,我发现了解析payload的问题。当库解析payload时,“iat”的值是无效的。这就是错误的来源。图书馆在做什么:
Buffer.from(payload, 'base64').toString(encoding)
它返回什么:
"{"user":{"id":"userId"},"iat":.��n\���ctLf��x�):�'�8}"
但我没有为“iat”字段提供任何自定义选项。这就是我从图书馆自动得到的。
令牌是:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjoidXNlcklkIn0sImlhdCI6MTU2MjA0NzgzNiwiZXhwIjoxNTYyNDA3ODM2fQ.YCwjwaGV9Jm2u7rmsCe65wKzPTw5jtS38n2tVEGiCUI