hitesh
09/21/2023, 9:48 AMimport { Request, Response, NextFunction } from "express";
import JsonWebToken, { JwtHeader, SigningKeyCallback } from "jsonwebtoken";
import jwksClient from "jwks-rsa";
export const verifySession = () => {
var client = jwksClient({
jwksUri: process.env.JWKS_URI as string,
requestHeaders: {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36'
}
});
function getKey(header: JwtHeader, callback: SigningKeyCallback) {
client.getSigningKey(header.kid, function (err, key) {
var signingKey = key?.getPublicKey();
console.log(process.env.JWKS_URI)
callback(err, signingKey);
});
}
return async (req: Request, res: Response, next: NextFunction) => {
if (!req.headers.authorization) {
return res
.status(401)
.send({ success: false, message: "Authorization header is required" });
}
const token = req.headers.authorization.split(" ")[1];
JsonWebToken.verify(token, getKey, {}, function (err, decoded) {
if (err) {
console.log(err);
return res
.status(401)
.send({ success: false, message: "Invalid token" });
} else {
const userID: string = decoded?.sub as string;
req.user = userID; // set the decoded token to the request object
next();
}
});
};
};