From 50e8f5b4c6160a03bef16ba3e4044d8cf0649df7 Mon Sep 17 00:00:00 2001 From: Toby Date: Mon, 2 Oct 2023 23:10:45 +0200 Subject: [PATCH] add skipValidation option for verify --- src/index.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/index.ts b/src/index.ts index c1b16a3..d044cd4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -87,6 +87,11 @@ export interface JwtSignOptions extends JwtOptions { * @prop {boolean} [throwError=false] If `true` throw error if checks fail. (default: `false`) */ export interface JwtVerifyOptions extends JwtOptions { + /** + * If `true` all expiry checks will be skipped + */ + skipValidation?: boolean + /** * If `true` throw error if checks fail. (default: `false`) * @@ -229,11 +234,11 @@ export async function sign(payload: JwtPayload, secret: string | JsonWebKey, opt * @throws {Error | string} Throws an error `string` if the token is invalid or an `Error-Object` if there's a validation issue. * @returns {Promise} Returns `true` if signature, `nbf` (if set) and `exp` (if set) are valid, otherwise returns `false`. */ -export async function verify(token: string, secret: string | JsonWebKey, options: JwtVerifyOptions | JwtAlgorithm = { algorithm: 'HS256', throwError: false }): Promise { +export async function verify(token: string, secret: string | JsonWebKey, options: JwtVerifyOptions | JwtAlgorithm = { algorithm: 'HS256', skipValidation: false, throwError: false }): Promise { if (typeof options === 'string') options = { algorithm: options, throwError: false } - options = { algorithm: 'HS256', throwError: false, ...options } + options = { algorithm: 'HS256', skipValidation: false, throwError: false, ...options } if (typeof token !== 'string') throw new Error('token must be a string') @@ -256,21 +261,21 @@ export async function verify(token: string, secret: string | JsonWebKey, options const { payload } = decode(token) - if (!payload) { + if (!options.skipValidation && !payload) { if (options.throwError) throw 'PARSE_ERROR' return false } - if (payload.nbf && payload.nbf > Math.floor(Date.now() / 1000)) { + if (!options.skipValidation && payload.nbf && payload.nbf > Math.floor(Date.now() / 1000)) { if (options.throwError) throw 'NOT_YET_VALID' return false } - if (payload.exp && payload.exp <= Math.floor(Date.now() / 1000)) { + if (!options.skipValidation && payload.exp && payload.exp <= Math.floor(Date.now() / 1000)) { if (options.throwError) throw 'EXPIRED'