如何在Node JS中使用jwt为所有用户授予不同的令牌

问题描述 投票:0回答:1

我有一个node.js应用。我正在使用Json Web令牌进行授权。当我使用数据库中的用户登录时,它将为该用户创建令牌。但是我可以将该令牌用于其他用户,并且它也可以再次使用。我需要为所有用户使用不同的令牌,并且不应将一个用户的令牌用于另一用户。 (我的工作电脑上没有互联网,所以我不能在这里在电脑上写代码)

这是我的verify-token.js(中间件):

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'
    });
}

}

这是我的登录代码(我在此处创建令牌)如果密码为真:

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);

我希望一个令牌只能用于一个用户,并且对于每次登录,它都应该为所有用户创建一个新令牌。有什么建议吗?

我有一个node.js应用。我正在使用Json Web令牌进行授权。当我使用数据库中的用户登录时,它将为该用户创建令牌。但是我可以将该令牌用于其他用户,......>

javascript node.js authentication jwt authorization
1个回答
0
投票

您将电子邮件包含在令牌正文中;为什么还不将用户ID包括在声明中(字段)?当您验证令牌时,如果令牌成功,它将把正文返回给您,因此您将知道令牌是为哪个用户创建的,如果不是那个发出请求的用户,则将拒绝它。

为了确保两个人不会同时使用同一令牌,您可以在生成有效令牌,令牌过期或被撤销(例如,用户退出或报告冒名顶替者(如果距离较远),将其从列表中删除。在验证过程中,如果令牌不在列表中,则甚至不必费心对其进行解码,只需立即将其拒绝。

© www.soinside.com 2019 - 2024. All rights reserved.