无法使用相同的机密验证JWT令牌

时间:2018-10-05 04:52:44

标签: javascript node.js jwt

我有两个不同的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是否相同。怎么了?

0 个答案:

没有答案