UNPKG

@practica/jwt-token-verifier

Version:

JWT for Practica

53 lines (43 loc) 1.54 kB
/* eslint-disable consistent-return */ import jwt, { VerifyErrors } from 'jsonwebtoken'; export type JWTOptions = { secret: string; }; export const jwtVerifierMiddleware = (options: JWTOptions) => { // 🔒 TODO - Once your project is off a POC stage, change your JWT flow to async using JWKS // Read more here: https://www.npmjs.com/package/jwks-rsa const middleware = (req, res, next) => { const authenticationHeader = req.headers.authorization || req.headers.Authorization; if (!authenticationHeader) { return res.sendStatus(401); } let token: string; // A token comes in one of two forms: 'token' or 'Bearer token' const authHeaderParts = authenticationHeader.split(' '); if (authHeaderParts.length > 2) { // It should have 1 or 2 parts (separated by space), the incoming string has unknown structure return res.sendStatus(401); } if (authHeaderParts.length === 2) { [, token] = authHeaderParts; } else { token = authenticationHeader; } jwt.verify( token, options.secret, // TODO: we should remove this any according to the library, jwtContent can not contain data property // eslint-disable-next-line @typescript-eslint/no-explicit-any (err: VerifyErrors | null, jwtContent: any) => { // TODO use logger to report the error here if (err) { return res.sendStatus(401); } req.user = jwtContent.data; next(); } ); }; return middleware; };