Search code examples
expresspassport.jssequelize.jsepilogue

Epilogue endpoints are not being authenticated with passport


My code is below and the auth complete never gets triggered. I'm not sure why since this is direct from the epilogue docs.

dataplan.list.auth((req, res, context) => {
  console.log('authenticating')
  // return new Promise(function(resolve, reject) {
    console.log('auth with passport')
    passport.authenticate('jwt',{session: false}, function(err, user, info) {
      console.log('auth complete')
      if(err) {
        res.status(500);
        resolve(context.stop());
      }

      if(user) {
        resolve(context.continue());
      } else {
        context.error(new ForbiddenError());
      }
    });
  // }); 
})

Solution

  • Ensure you are returning a promise in your middleware function. It appears you were doing this but had it crossed out.

    dataplan.list.auth((req, res, context) => {
      return new Promise(resolve => {
        passport.authenticate('jwt', (err, user, expiry) => {
          if(err) {
            res.status(500);
            return resolve(context.stop());
          }
    
          if(user) {
            resolve(context.continue());
          } else {
            return resolve(context.error(new ForbiddenError()));
          }
        })(req, res);
      });
    });