How to make authenticated requests on Supertest

Let's see how to make authenticated requests on Supertest, so if you need to add an Authorization header or send requests after a login or with a cookie, keep reading!

Add a Authorization header 🔑

Simple example to add the Authorization header in a Supertest request:

supertest('http://localhost:8080')  
  .get(‘/api/resource’)
  .set('Authorization', 'Bearer ' + token) 
  .end((err, res) => {  
     if (err) {
       return done(err);
     }
  });

Note this example add it using .set('Authorization', 'Bearer ' + token)

After login or using a cookie 🍪

For example, if you are testing an endpoint which requires be logged in and need to test the login too, let's see one way to test it

First, test the login and save your-cookie to use it later:

let session = null;
supertest('http://localhost:8080')  
  .post(‘/login’)  
  .send(loginJson)  
  .end((err, res) => {  
     if (err) {
       return done(err);
     }
     session = res.header['your-cookie'];  
     done();  
 });

Then use your session cookie in the next requests:

supertest('http://localhost:8080') 
  .delete(`/api/resource/${ resourceId }`)
  .set('Cookie', session)
  .end((err, res) => {
    if (err) {
      return done(err);
    }
    done();  
  }); 

These are super simple examples just to point the use of set() for auth in Supertest

Leave a comment with your questions or doubts, happy to help you 🙂
Thanks for reading! 👋