我想知道如何实现基于 JWT 的身份验证系统,其中没有明确的到期日期
如果你想使用JWT来实现,你可以不设置任何值的过期时间,就像下面的代码:
const jwt = require("jsonwebtoken");
require("dotenv").config();
const secret = process.env.SECRET;
const token = jwt.sign({ user_id: 1234 }, secret);
console.log("The JWT that will never expire:", token);
但是,如果您想在不使用 jsonwebtoken 模块(通过使用自定义实现)的情况下执行此操作,您可以使用 crypto 模块创建自己的令牌库,就像以下代码一样:
const crypto = require("crypto");
require("dotenv").config();
const secret = process.env.SECRET;
const generateTokenWithoutExpiration = (userId) => {
const signature = crypto.createHmac("sha256", secret).update(userId.toString()).digest("hex");
const token = `${userId.toString()}.${signature}`
return token;
});
const verifyToken = (userId, token) => {
const [ stringValueOfUserId, signature ] = token.split(".");
const expectedToken = crypto.createHmac("sha256", secret).update(parseInt(stringValueOfUserId).digest("hex");
return expectedToken === token;
};
module.exports = {
generateTokenWithoutExpirationTime,
verifyToken
};