使用Node.js刷新JWT令牌的最佳方法

时间:2019-08-09 05:42:12

标签: javascript node.js reactjs jwt

我已经创建了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'
                        })
                    }
                }

1 个答案:

答案 0 :(得分:0)

您将需要两个令牌:

  1. Refresh Token(将保存在数据库中)
  2. Access Token(您的JWT将很快过期,例如10分钟)

刷新令牌通常不会很快过期。但是,如何保护刷新令牌可能存在挑战。

  

您还需要在用户每次刷新令牌/登录时更改数据库中的刷新令牌。

您还需要存储expiry_date的访问令牌(您可以通过登录api做出响应)。

然后,根据您的安全要求,您可以在前端将这些令牌存储在localStorage / sessionStorage中。

然后,每个API调用都会检查您设置的到期日期。而且如果达到某个阈值(例如,expiry_date之前的5分钟),则可以调用刷新令牌API。

这是我使用的一种方法。但是,它可能不被视为最佳实践。