我如何在 jwt 令牌中设置过期 30 分钟

Posted

技术标签:

【中文标题】我如何在 jwt 令牌中设置过期 30 分钟【英文标题】:how can i setup expiration 30minute in jwt token 【发布时间】:2021-07-12 01:04:48 【问题描述】:

我希望 jwt 令牌在 1 分钟后过期。 但是当我运行我的代码时它不起作用。

如何修复我的代码?

有点困惑..我想1分钟后过期.... 我希望 jwt 令牌在 1 分钟后过期。 但是当我运行我的代码时它不起作用。

如何修复我的代码?

有点糊涂..我想1分钟后过期....

(auth.js)

    const express = require("express");
    const passport = require("passport");
    const bcrypt = require("bcrypt");
    // const User = require("../models/user");
    const jwt = require("jsonwebtoken");
    const  User, Post, Comment, Image  = require("../models");
    const  isLoggedIn, isNotLoggedIn  = require("./middlewares");
    const  Op  = require("sequelize");

    const router = express.Router();

    router.get("/kakao", passport.authenticate("kakao"));

    router.get(
      "/kakao/callback",
      passport.authenticate("kakao", 
        session: false,
      ),
      (req, res, next) => 
        const  snsId, provider  = req.user;

        const token = jwt.sign( id: snsId, provider , "jwt-secret-key", 
          expiresIn: 60 * 60,
        );
        res.redirect(`demo://app?accessToken=$token`);
       
      
    );

(护照/index.js)

    const passport = require("passport");
    const  Strategy: LocalStrategy  = require("passport-local");
    const  ExtractJwt, Strategy: JWTStrategy  = require("passport-jwt");
    const bcrypt = require("bcrypt");
    const User = require("../models/user");
    const kakao = require("./kakaoStrategy");

    const JWTConfig = 
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      // jwtFromRequest: ExtractJwt.fromHeader("Authorization"),
      secretOrKey: "jwt-secret-key",
    ;

    const JWTVerify = async (jwtPayload, done) => 
      try 
        
        const user = await User.findOne( where:  snsId: jwtPayload.id  );
        
        if (user) 
          done(null, user);
          return;
        
       
        done(null, false,  reason: "올바르지 않은 인증정보 입니다." );
       catch (error) 
        console.error(error);
        done(error);
      
    ;

    kakao();

    module.exports = () => 
      passport.use("jwt", new JWTStrategy(JWTConfig, JWTVerify));
    ;

【问题讨论】:

您如何验证令牌?你能在这里添加代码吗? 你使用的是哪个库? 【参考方案1】:

你可以替换这个

const token = jwt.sign( id: snsId, provider , "jwt-secret-key", 
    expiresIn: 60 * 60,
);

有了这个

const iat = Math.floor(Date.now() / 1000)
const exp = iat + 60 // seconds
const token = jwt.sign(
      
        id: snsId,
        provider,
        iat,
        exp
      ,
      'jwt-secret-key'
    )

【讨论】:

【参考方案2】:
var jwt = require('jsonwebtoken');
var token = jwt.sign( foo: 'bar' , 'secret key',expiresIn: 1); // 1 sec
console.log(token);
setTimeout(()=>
  try 
  var decoded = jwt.verify(token, 'secret key');
  console.log(decoded)
 catch(err) 
  console.log('error',err)

,2000);

更多详情请参考https://www.npmjs.com/package/jsonwebtoken

【讨论】:

你的意思是 var token = jwt.sign( foo: 'bar' , 'secret key',expiresIn: 1); // 1 秒是如果我想在 1 分钟后过期,我应该更改 expiresIn: 60 ??? 是的,这就是为什么要在第二个添加评论

以上是关于我如何在 jwt 令牌中设置过期 30 分钟的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Alamofire Swift 中刷新 JWT 令牌状态代码 500

如何设置 json web 令牌过期和验证

在流明 jwt 令牌中设置过期时间

如何使用 JWT 在 Spring Boot 中获取 Refresh Token

为啥我的 JWT 不记名身份验证在令牌说 5 分钟后将令牌识别为过期?

如何延长node.js中相同jwt令牌的到期时间