首页 > 解决方案 > 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/');

标签: javascriptnode.jsexpressjwtbackend

解决方案


请在我们定义令牌的地方初始化配置变量,然后通过 axios 请求传递它。

例子 :-

const config = {
headers: { Authorization: `Bearer ${token}` }
};

Axios.post( 


'http://localhost:5000/users/',


config
).then(console.log).catch(console.log);

推荐阅读