@the-node-forge/jwt-utils
Version:
A flexible, lightweight Node.js JWT library for generating, verifying, and managing JSON Web Tokens (JWTs). Supports access and refresh tokens with customizable secrets for authentication and role-based access control. Includes middleware for Express, Fas
79 lines (78 loc) • 2.57 kB
JavaScript
;
/* eslint-disable @typescript-eslint/no-require-imports, @typescript-eslint/no-unused-vars */
Object.defineProperty(exports, "__esModule", { value: true });
exports.authenticateToken = authenticateToken;
exports.authenticateRefreshToken = authenticateRefreshToken;
let koa;
let verifyToken;
let verifyRefreshToken;
function authenticateToken(accessSecret) {
if (!koa) {
try {
koa = require('koa');
}
catch (error) {
throw new Error("Koa middleware is being used, but 'koa' is not installed. Please install it as a peer dependency.");
}
}
if (!verifyToken) {
({ verifyToken } = require('../jwt'));
}
return async (ctx, next) => {
// Skip auth for unknown routes
if (ctx.path !== '/protected') {
await next();
return;
}
const authHeader = ctx.headers.authorization;
if (!authHeader?.startsWith('Bearer ')) {
ctx.status = 401;
ctx.body = { message: 'Unauthorized: No token provided or invalid format' };
return;
}
const [, token] = authHeader.split(' ');
const user = verifyToken(token, accessSecret);
if (!user) {
ctx.status = 403;
ctx.body = { message: 'Forbidden: Invalid or expired token' };
return;
}
ctx.state.user = user;
await next();
};
}
function authenticateRefreshToken(refreshSecret) {
if (!koa) {
try {
koa = require('koa');
}
catch (error) {
throw new Error("Koa middleware is being used, but 'koa' is not installed. Please install it as a peer dependency.");
}
}
if (!verifyRefreshToken) {
({ verifyRefreshToken } = require('../jwt'));
}
return async (ctx, next) => {
if (ctx.path !== '/refresh') {
await next();
return;
}
const authHeader = ctx.headers.authorization;
if (!authHeader?.startsWith('Bearer ')) {
ctx.status = 401;
ctx.body = { message: 'Unauthorized: No token provided or invalid format' };
return;
}
const [, token] = authHeader.split(' ');
const user = verifyRefreshToken(token, refreshSecret);
if (!user) {
ctx.status = 403;
ctx.body = { message: 'Forbidden: Invalid or expired refresh token' };
return;
}
ctx.state.user = user;
ctx.status = 200;
await next();
};
}