我如何在 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
如何使用 JWT 在 Spring Boot 中获取 Refresh Token