@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
48 lines (47 loc) • 1.71 kB
JavaScript
;
/* eslint-disable @typescript-eslint/no-require-imports, @typescript-eslint/no-unused-vars */
Object.defineProperty(exports, "__esModule", { value: true });
exports.AuthenticateToken = void 0;
let NestJsCommon;
let verifyToken;
let verifyRefreshToken;
try {
NestJsCommon = require('@nestjs/common');
}
catch (error) {
throw new Error("NestJS middleware is being used, but '@nestjs/common' is not installed. Please install it as a peer dependency.");
}
const common_1 = require("@nestjs/common");
class AuthenticateToken {
constructor(accessSecret, refreshSecret) {
this.accessSecret = accessSecret;
this.refreshSecret = refreshSecret;
if (!verifyToken) {
({ verifyToken } = require('../jwt'));
}
if (!verifyRefreshToken) {
({ verifyRefreshToken } = require('../jwt'));
}
}
canActivate(context) {
const request = context.switchToHttp().getRequest();
const authHeader = request.headers.authorization;
if (!authHeader?.startsWith('Bearer ')) {
throw new common_1.UnauthorizedException('Unauthorized: No token provided or invalid format');
}
const [, token] = authHeader.split(' ');
let decoded;
if (request.url.includes('/refresh')) {
decoded = verifyRefreshToken(token, this.refreshSecret);
}
else {
decoded = verifyToken(token, this.accessSecret);
}
if (!decoded) {
throw new common_1.UnauthorizedException('Unauthorized: Invalid or expired token');
}
request.user = decoded;
return true;
}
}
exports.AuthenticateToken = AuthenticateToken;