Javascript 如何在NodeJS中高效使用Json Web令牌

Javascript 如何在NodeJS中高效使用Json Web令牌,javascript,node.js,json,jwt,authorization,Javascript,Node.js,Json,Jwt,Authorization,我有一个节点js应用程序。我想用JWT做授权。当我的代码如我在下面所写的那样时,我试图与数据库中的用户登录,但它首先到达中间件,它说“Auth Failed”。但如果我删除中间件并使用数据库中的用户登录,它会向我返回一个令牌。然后我再次添加中间件,并为另一个用户使用该令牌,这次它工作了,并且它也为另一个用户接受该令牌!但是我不想要这个。我希望当我与数据库中的用户登录时,它应该为用户返回一个唯一的令牌,然后我应该访问中间件。这是我的密码: 这是我的中间件: const jwt = require(

我有一个节点js应用程序。我想用JWT做授权。当我的代码如我在下面所写的那样时,我试图与数据库中的用户登录,但它首先到达中间件,它说“Auth Failed”。但如果我删除中间件并使用数据库中的用户登录,它会向我返回一个令牌。然后我再次添加中间件,并为另一个用户使用该令牌,这次它工作了,并且它也为另一个用户接受该令牌!但是我不想要这个。我希望当我与数据库中的用户登录时,它应该为用户返回一个唯一的令牌,然后我应该访问中间件。这是我的密码:

这是我的中间件:

const jwt = require('jsonwebtoken');

module.exports = (req, res, next) => {
try {

const token = req.headers.authorization.split(" ")[1];
const decodedToken = jwt.verify(token, 'secret_key');
req.userData = decodedToken;
next();
}catch(error) {
return res.status(401).send({
    message: 'Auth failed'
});
}
这是我的登录代码(我在这里创建令牌),如果密码为true:

 const token = jwt.sign({
            email:user.email,
            password: user.password

        }, 
        'secret_key',
        {
            expiresIn :"2h"
        }
        )
        return res.status(200).send({ message: 'success', token: token});
在app.js中:

const checkAuth = require('../middleware/checkauth');
router.get('/api/company',checkAuth,companyController.list);

如何使用JWT实现授权安全性?有什么建议吗?

通常,如果您有用户令牌,您可以获得该用户的所有授权API。因为用户的jwt识别该用户是谁。Jwt包含要识别的唯一密钥。对你来说,那就是电子邮件。我正在和邮递员一起尝试。例如,当我与一个用户登录时,postman会为该用户返回一个令牌。然后,我将该令牌用于另一个用户。它再次获得成功。但这不应该发生如果陌生人有令牌,他仍然可以使用该令牌访问每个api这是授权问题,如果您希望特定用户执行不同的操作,您可以在jwt或您的db中为该用户设置角色,中间件中的每个请求都会检查该角色,以执行特定的操作。我不希望每个用户都有一个唯一的令牌。但是我也可以对其他用户使用相同的令牌,这不应该发生