jwt - 无法从听众那里得到令牌
问题描述
我确实可以登录,创建令牌并在我发送请求帖子时从标题中查看它
router.post('/login', (req, res, next) => {
const email = req.body.email
const password = req.body.password
connection.query(
`SELECT * FROM ETB.users WHERE email = ?;`, email,
(err, result) => {
console.log(result[0]);
if (err) {
return res.status(500).send(err)
} else if (!result[0]){
return res.status(409).send('Unknown user')
}
// check password
const passwordIsValid = bcrypt.compareSync(password, result[0].password);
console.log(passwordIsValid);
if(!passwordIsValid){
console.log('wrong password');
return res.status(401).send({ auth: false, token: null })
}
// Token creation
console.log('1', result[0].id);
const token = jwt.sign(
{id : result[0].id, email: result[0].email, type : result[0].type},
secret,
{
expiresIn: '24h'
},
{ algorithm: 'RS256' }
);
console.log(token);
res.header("Access-Control-Expose-Headers", "x-access-token")
console.log(res.header());
res.set("x-access-token", token);
res.status(200).send({ auth: true })
connection.query(`UPDATE ETB.users SET last_login = now() WHERE id = '${result[0].id}'` )
});
})
但是,当我尝试获取“记录”路线时;我不断收到“拒绝访问”,并且令牌没有出现在标题中
router.get('/secret-route', userMiddleware.isLoggedIn, (req, res, next) => {
res.json({
posts: {
title: "my first post",
description: 'blabla'
}
});
});
中间件
isLoggedIn: (req, res, next) => {
const token = req.header('x-access-token')
if (!token) return res.status(401).send('Acess Denied');
try {
const verified = jwt.verify(token, process.env.JWT_SECRET);
req.user = verified;
} catch (err) {
res.status(400).send('Invalid Token')
}
next();
}
在此处输入图片描述 谢谢您的帮助
解决方案
这是因为 Postman 本身不维护标题。您必须复制并粘贴在环境变量内的标头中收到的令牌,以便它可用于您发出的每个请求。
请参阅此链接以了解如何在 Postman 中将标头添加为环境变量。
另一种解决方法是将其复制并粘贴到您发出的每个请求中的“x-access-token”标头中,但第一个选项要好得多。
推荐阅读
- c# - 行车记录仪公司智能卡返回“6A88”
- go - 扩展并发负载时,基于 grpc 协议的 ALB 是否会返回与网络相关的错误?
- typescript - 如何使用 vue3.0/typescript/bootstrap5.0 确认弹出窗口
- c - 参数类型 void 不完整?
- mongodb - MongoDb:我可以使用 findOneAndUpdate() 来确保文档仅由一个线程读取和修改吗?
- java - 文件资源管理器未打开以上传文件
- python - 文件存储到 SQL。烧瓶
- symfony - Symfony:限制身份验证器的会话
- spring - 使用存储库层的组件/功能测试中的 ReflectionUtil 错误
- c - malloc 中用于复制数组元素的错误