【问题标题】:how can i setup expiration 30minute in jwt token我如何在 jwt 令牌中设置过期 30 分钟
【发布时间】: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));
    };

【问题讨论】:

  • 您如何验证令牌?你能在这里添加代码吗?
  • 你使用的是哪个库?

标签: javascript node.js reactjs react-native jwt


【解决方案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} ???
    • 是的,这就是为什么要在第二个添加评论
    猜你喜欢
    • 1970-01-01
    • 2016-08-08
    • 2021-04-26
    • 2016-11-13
    • 2022-11-27
    • 2011-07-30
    • 2021-07-04
    • 2014-04-17
    • 2020-05-05
    相关资源
    最近更新 更多