我有一个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令牌进行授权。当我使用数据库中的用户登录时,它将为该用户创建令牌。但是我可以将该令牌用于其他用户,......>
您将电子邮件包含在令牌正文中;为什么还不将用户ID包括在声明中(字段)?当您验证令牌时,如果令牌成功,它将把正文返回给您,因此您将知道令牌是为哪个用户创建的,如果不是那个发出请求的用户,则将拒绝它。
为了确保两个人不会同时使用同一令牌,您可以在生成有效令牌,令牌过期或被撤销(例如,用户退出或报告冒名顶替者(如果距离较远),将其从列表中删除。在验证过程中,如果令牌不在列表中,则甚至不必费心对其进行解码,只需立即将其拒绝。