我已经创建了node.js后端。在登录时,我正在发送jwt令牌。为了用户体验,我不希望他们重新登录,而是刷新他们的令牌,我将其设置为在4小时后过期。
但是,在如何有效地做到这一点方面,我并没有获得很好的领导。我的想法是在客户端提供一个按钮,方法是单击用户可以刷新其令牌的按钮。假设我可以从客户端拨打电话,我需要在实施方面提供帮助。赞赏。
if (response) {
bcrypt.compare(req.body.password, response.password, (error, result) => {
if (result) {
const token = jwt.sign(
{
email: response.email,
userId: response._id
},
process.env.JWT_KEY,
{
expiresIn: '4h'
});
return res.status(200).json({
message: 'Auth Successful! User Found. ',
token
})
} else {
return res.status(404).json({
message: 'Auth Failed! User Not found'
})
}
}
答案 0 :(得分:0)
您将需要两个令牌:
Refresh Token
(将保存在数据库中)Access Token
(您的JWT将很快过期,例如10分钟)刷新令牌通常不会很快过期。但是,如何保护刷新令牌可能存在挑战。
您还需要在用户每次刷新令牌/登录时更改数据库中的刷新令牌。
您还需要存储expiry_date
的访问令牌(您可以通过登录api做出响应)。
然后,根据您的安全要求,您可以在前端将这些令牌存储在localStorage / sessionStorage中。
然后,每个API调用都会检查您设置的到期日期。而且如果达到某个阈值(例如,expiry_date之前的5分钟),则可以调用刷新令牌API。
这是我使用的一种方法。但是,它可能不被视为最佳实践。