javascript - JWT 身份验证不适用于网站,但适用于“邮递员”
问题描述
当我尝试通过“邮递员”或“失眠”等工具对用户进行身份验证时,一切正常(当我设置承载时)。
但是当我尝试通过网站登录时,我在这里收到错误:
function authenticateToken (req, res, next) {
const authHeader = req.headers['authorization']
const token = authHeader && authHeader.split(' ')[1]
console.log(token);
if(token == null) return res.sendStatus(401).send("TOKENS IS NULL");
jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user)=>{
if(err) return res.send(403);
req.user = user;
next();
})
}
我得到的错误:
GET http://localhost:5000/users/ 401 (Unauthorized)
Uncaught (in promise) Error: Request failed with status code 401
有人有任何教程/示例/建议可以帮助我吗?
我的更多代码可以更好地了解情况:
router.route('/login').post(async (req, res) => {
const user = await Users.findOne({username: req.body.username});
if(!user) throw Error('Password or Username')
if(await bcrypt.compare(req.body.password, user.password)) {
const accessToken = jwt.sign(user.toJSON(), process.env.ACCESS_TOKEN_SECRET, {expiresIn: 604800});
res.json({ accessToken: accessToken });
} else throw Error('Password or Username is incorrect');
});
router.route('/').get(authenticateToken, async (req, res) => {
const user = await Users.findOne({username: req.body.username});
if(!user) throw Error('User do not exist')
res.json(user)
});
我在我的 React 组件中使用 axios 调用后端
const user = axios.get('http://localhost:5000/users/');
解决方案
请在我们定义令牌的地方初始化配置变量,然后通过 axios 请求传递它。
例子 :-
const config = {
headers: { Authorization: `Bearer ${token}` }
};
Axios.post(
'http://localhost:5000/users/',
config
).then(console.log).catch(console.log);
推荐阅读
- java - 如果在 java 中使用 MAP,如何发送 JSON @RequestBody?
- azure - 从 Azure DevOps 获取组织/实例名称列表
- android - 如何为具有各种片段的 Kotlin Android 应用程序创建带有协程的单例计时器?
- shopify - 如何在 shopify 中创建自定义模块(CRUD)?喜欢,产品和导航
- sql - 多行的 SQL 查询
- node.js - npm install bcrypt@3.0.6 使用节点 6.12.1 失败
- sql-server - 使用一个表中的 id 连接 4 个表并为 2 个表求和数量
- php - 如何通过 jQuery AJAX 将 php 变量拉入 js 对象的属性中?
- kubernetes - 如何获取部署在 Kubernetes 中的应用程序的延迟?
- algorithm - 如何在有效的时间内解决 Kakurasu Puzzle?