admin管理员组

文章数量:1279117

I want the jwt token to expire after 1 minute. But when I run my code it doesn't work.

how can i fix my code?

it's little confused.. i want to expired 1minute later.... I want the jwt token to expire after 1 minute. But when I run my code it doesn't work.

how can i fix my code?

it's little confused.. i want to expired 1minute later....

(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}`);
       
      }
    );

(passport/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));
    };

I want the jwt token to expire after 1 minute. But when I run my code it doesn't work.

how can i fix my code?

it's little confused.. i want to expired 1minute later.... I want the jwt token to expire after 1 minute. But when I run my code it doesn't work.

how can i fix my code?

it's little confused.. i want to expired 1minute later....

(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}`);
       
      }
    );

(passport/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));
    };
Share Improve this question edited Apr 17, 2021 at 5:07 user15322469 asked Apr 17, 2021 at 4:57 user15322469user15322469 9093 gold badges14 silver badges36 bronze badges 2
  • how are you validating the token? can you add the code here. – RICKY KUMAR Commented Apr 17, 2021 at 4:59
  • Which lib are you using? – Vinicius Katata Commented Apr 17, 2021 at 4:59
Add a ment  | 

3 Answers 3

Reset to default 3
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);

refer https://www.npmjs./package/jsonwebtoken for more details

you can use a string describing a time span

Example

import jwt from "jsonwebtoken"
let token = jwt.sign({ foo: "bar" }, "secret key", { expiresIn: "30m" })

reference

ms('2 days')  // 172800000
ms('1d')      // 86400000
ms('10h')     // 36000000
ms('2.5 hrs') // 9000000
ms('2h')      // 7200000
ms('1m')      // 60000
ms('5s')      // 5000
ms('1y')      // 31557600000
ms('100')     // 100
ms('-3 days') // -259200000
ms('-1h')     // -3600000
ms('-200')    // -200

This documentation will give you more information on strings describing a time span. https://github./vercel/ms/blob/master/readme.md

You can replace this

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

with this

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

本文标签: javascripthow can i setup expiration 30minute in jwt tokenStack Overflow