3

I have implemented the OAUth 2.0 flow as single authentication method for my express application.

In real situation, once a user connected using OAuth, a session is created and accessible server-side in req.session.passport.

In this session, there is the OAuth access token that is required to perform authenticated requests on my REST API. To be able to do so, I wrote a middleware that copies the token from req.session.passport to the Authorization header.

app.use(function(req, res, next) {
  if (req.session.passport) {
    req.headers['Authorization'] = req.session.passport.user.accessToken;
  }
  next();
});

Now, I would like to test this middleware without going through the entire oauth flow. Ideally, I would like to create a session manually and inject test data inside req.session.passport, then call any protected endpoint of my API to check that it can correctly perform authenticated requests.

I tried to manually set data inside req.session in the following test

it('Should be able to make an authenticated request with session data',
function(done) {
  var req = request(app).get('/api/SomeProtectedEndpoint');

  req.session = {
    passport: {
      user: {
        accessToken : 'eade123d3ffwhatever'
      }
    }
  }

  req.expect(200, function(err, res){
      if (err) return done(err);
      done();
    });
});

But if I display the contents of req.session inside my middleware, the manual data is gone. I believe it is removed by express-session.

How can I manually inject session data in a request for testing purposes ?

Overdrivr
  • 6,296
  • 5
  • 44
  • 70

0 Answers0