@@ -22,16 +22,38 @@ module.exports.expressJwtSecret = function (options) {
2222 const client = new JwksClient ( options ) ;
2323 const onError = options . handleSigningKeyError || handleSigningKeyError ;
2424
25- return function secretProvider ( req , header , payload , cb ) {
25+ const expressJwt7Provider = async ( req , token ) => {
26+ const header = token . header ;
2627 if ( ! header || ! supportedAlg . includes ( header . alg ) ) {
27- return cb ( null , null ) ;
28+ return ;
2829 }
29-
30- client . getSigningKey ( header . kid )
31- . then ( key => {
32- cb ( null , key . publicKey || key . rsaPublicKey ) ;
33- } ) . catch ( err => {
34- onError ( err , ( newError ) => cb ( newError , null ) ) ;
30+ try {
31+ const key = await client . getSigningKey ( header . kid ) ;
32+ return key . publicKey || key . rsaPublicKey ;
33+ } catch ( err ) {
34+ return new Promise ( ( resolve , reject ) => {
35+ onError ( err , ( newError ) => {
36+ if ( ! newError ) { return resolve ( ) ; }
37+ reject ( newError ) ;
38+ } ) ;
3539 } ) ;
40+ }
41+ } ;
42+
43+ return function secretProvider ( req , header , payload , cb ) {
44+ //This function has 4 parameters to make it work with express-jwt@6
45+ //but it also supports express-jwt@7 which only has 2.
46+ if ( arguments . length === 4 ) {
47+ expressJwt7Provider ( req , { header } )
48+ . then ( key => {
49+ setImmediate ( cb , null , key ) ;
50+ } ) . catch ( err => {
51+ setImmediate ( cb , err ) ;
52+ } ) ;
53+
54+ return ;
55+ }
56+
57+ return expressJwt7Provider ( req , arguments [ 1 ] ) ;
3658 } ;
3759} ;
0 commit comments