【问题标题】:How to automatically do a rest call on jwt token expiry in node js如何在节点js中自动对jwt令牌到期进行休息调用
【发布时间】:2018-07-11 11:09:12
【问题描述】:

我在我的节点 js 应用程序中使用 JWT 令牌进行身份验证,当生成新令牌时,我在 DB 中使用字段 custid、token、sessionValid(boolean) 进行更新。

现在我已将令牌到期时间设置为 5 分钟。因此,一旦令牌到期,它应该会自动更新数据库记录并将 sessionValid 设置为 false。这里我有一个更新数据库的休息调用。这样做的原因方法是我实现 SSO,而其他应用程序将使用相同的休息调用进行会话验证。

下面是我如何生成令牌的代码

var isExpired = false;
router.post('/auth', passport.authenticate(  
'local', {
   session: false
 })generateToken, inserttoken,respond);

 function generateToken(req, res, next) {  
    token = jwt.sign({
    id: req.user.id,
    },SECRET, {
    expiresIn: 5 * 60
  });
    req.token = token;
    next();
  }

  function inserttoken(req,res,next){
    //In this function Im doing rest call to update the db with the token generated 
  }

   function respond(req, res) { 
    res.cookie('customerid', req.user.id, { expires: new Date(new Date().getTime()+1*60*
    1000),httpOnly: true })
    res.cookie('token', req.token, { expires: new Date(new Date().getTime()+1*60*
    1000), httpOnly: true })
    res.status(200).json({
    user: req.user,
    token: req.token
  });
 }

那么,当令牌过期时,我怎样才能自动进行休息调用并更新数据库。我什至也将这些保存在我的 cookie 中。

任何帮助表示赞赏。谢谢!

【问题讨论】:

    标签: javascript node.js jwt


    【解决方案1】:

    如果您要存储令牌,那么您就不是无会话跟踪。所以 这不是 RESTful。

    JWT 令牌基于可验证的签名,需要存储。 要保持会话,请在到期时间内不断更新前端的令牌。

    Please follow this link for better understanding

    希望有帮助!

    【讨论】:

    • 嘿 rahul 即使我可以保存在 cookie 中,我仍在寻找存储在数据库中的原因是我正在实现 SSO,而第二个应用程序是有角度的,我无法访问我从我的节点应用程序中保存的 cookie
    【解决方案2】:

    如果您在控制器中使用 Angular 作为前端,您可以在间隔中一次又一次地调用方法并将其发送到后端以检查其是否有效,无需存储 JWT 令牌。或者其他选项是将 JWT 存储在cookie 并在到期呼叫休息时设置到期时间..

    【讨论】:

    • 但在我的情况下,我有 2 个不同的应用程序节点应用程序和角度应用程序。并且 jwttoken 是在我的节点应用程序中创建的。我如何在我的角度应用程序中调用该函数
    猜你喜欢
    • 2018-11-02
    • 2020-12-21
    • 2018-12-26
    • 2017-11-30
    • 2019-09-20
    • 2017-06-13
    • 2014-12-29
    • 2018-02-12
    • 2018-11-16
    相关资源
    最近更新 更多