首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Passport-jwt令牌过期

Passport-jwt令牌过期
EN

Stack Overflow用户
提问于 2016-10-22 10:34:22
回答 3查看 21.7K关注 0票数 14

我正在使用passport-jwt生成我的令牌,但我注意到令牌永远不会过期,有没有办法根据为我设置的规则使特定的令牌无效,例如:

代码语言:javascript
复制
'use strict';
const passport = require('passport');
const passportJWT = require('passport-jwt');
const ExtractJwt = passportJWT.ExtractJwt;
const Strategy = passportJWT.Strategy;
const jwt = require('../jwt');
const cfg = jwt.authSecret();

const params = {
    secretOrKey: cfg.jwtSecret,
    jwtFromRequest: ExtractJwt.fromAuthHeader()
};

module.exports = () => {
    const strategy = new Strategy(params, (payload, done) => {
        //TODO: Create a custom validate strategy
        done(null, payload);
    });
    passport.use(strategy);
    return {
        initialize: function() {
            return passport.initialize();
        },
        authenticate: function() {
            //TODO: Check if the token is in the expired list
            return passport.authenticate('jwt', cfg.jwtSession);
        }
    };
};

或者一些使某些令牌无效的策略

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-07 20:03:50

JWT的标准是将过期作为"exp“包含在有效负载中。如果您这样做了,passport-JWT模块将会遵守它,除非您显式地告诉它不要这样做。比自己实现它更容易。

编辑

现在有更多的代码!

我通常使用npm模块jsonwebtoken来实际创建/签名我的令牌,它有一个选项,可以在有效负载的exp元素中使用友好的时间偏移量设置过期时间。它是这样工作的:

代码语言:javascript
复制
const jwt = require('jsonwebtoken');

// in your login route
router.post('/login', (req, res) => {
  // do whatever you do to handle authentication, then issue the token:

  const token = jwt.sign(req.user, 's00perS3kritCode', { expiresIn: '30m' });
  res.send({ token });
});

然后,您的JWT策略可以看起来像您已经拥有的,从我所看到的,它将自动遵守我上面设置的30分钟的过期时间(显然,您可以设置其他时间)。

票数 23
EN

Stack Overflow用户

发布于 2019-07-08 13:34:06

您可以使用以下策略生成过期时间限制为1小时的JWT-token。

代码语言:javascript
复制
let token = jwt.sign({
    exp: Math.floor(Date.now() / 1000) + (60 * 60),
    data: JSON.stringify(user_object)
}, 'secret_key');
res.send({token : 'JWT '+token}) 
票数 1
EN

Stack Overflow用户

发布于 2017-02-07 19:57:22

我在数据库中创建了一个文档,用于存储生成的令牌,并在用户发出检查令牌是否过期的请求时添加了到期日期。

这是我使用的验证策略。

代码语言:javascript
复制
/* ----------------------------- Create a new Strategy -------------------------*/
const strategy = new Strategy(params, (payload, done) => {

    const query = {
        token: jwtSimple.encode(payload, credentials.jwtSecret),
        expires: {$gt: new Date()}
    };

    TokenSchema.findOne(query, (err, result) => {
        if (err) done(err, null);
        if (!result) done(null, null);
        done(null, payload);
    });
});
passport.use(strategy);
/* -------------------------------------------------------------------------------*/

这是我的工作。

票数 -5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40187770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档