我有两个不同的API路由,其中嵌入了多个端点。其中之一是受保护的,并且仅当您在请求中发送JWT令牌时才可访问。当然,另一个是针对Auth的,它允许用户生成令牌,然后将其附加到每个请求中。假设相关导入,并且我的 Auth 代码在Auth.js
中,并且添加候选人在Candidate.js
中:
Auth.js
router.post('/login', (req, res) => {
let { email, password } = req.body;
db.collection('users').findOne({ email: email }, { projection: { email: 1, password: 1, accessGranted: 1 } }, (err, userData) => {
console.log(userData);
if (!err) {
let passwordCheck = bcrypt.compareSync(password, userData.password);
if (passwordCheck) {
if (userData.accessGranted) {
const payload = {
email: userData.email,
id: userData._id
}
let token = jwt.sign(payload, tokenSecret);
res.status(200)
.send({ token, email: userData.email });
} else {
//.. Other Code
}
} else {
// Other code
}
} else {
// Other code
}
})
})
现在,我在另一个文件中添加了一个中间件,如下所示:
Candidate.js
router.use((req, res, next) => {
const token = req.body.token;
if (token) {
jwt.verify(token, tokenSecret, function (err, decoded) {
if (!err) {
req.decoded = decoded;
next();
} else {
// Other Code
}
})
} else {
// Other Code
}
}
);
错误: jwt
抱怨我提供的令牌无效。
为进行原型制作,我将令牌保存在JS const
变量中,并仔细检查了两个文件中的tokenSecret
是否相同。怎么了?