Search code examples
expresshttpcookiesfetchamazon-elb

Cookies included in request header, but express returns empty cookies (using Amazon Load Balancer)


I'm doing fetch from my frontend to my express backend. But express logs req.cookies as '' (empty). I'm using cookieParser.

Why is express not finding the cookie, even though the browser shows the cookies being sent?

Note: I'm using cookies forwarded by my load balancer, which does the authentication and sends the session over.

Frontend

    fetch(`${MY_URL}/logout`, {
      credentials: 'include',
    })

NodeJS

const cookieParser = require("cookie-parser");
app.use(cookieParser());

app.get("/logout", (req, res, next) => {
  console.log(req.headers) // see below
  console.log(JSON.parse(JSON.stringify(req.cookies))); // logs {}
  console.log(JSON.parse(JSON.stringify(req.signedCookies))); // logs {}

  // do stuff with cookie
});

Headers

{
  ...
  cookie: ''
}

Cookie in Headers is an empty string

Network tab:

enter image description here


Solution

  • Got this working. Eventually the solution was that the Load balancer automatically forwards these headers to the backend silently. For my /logout api, instead of trying to grab the cookies from the headers, I set them regardless. Something like this:

    app.get('/logout', (req, res) => {
      res.cookie("AWSELBSessionCookie", "", {
        maxAge: -1,
        expires: Date.now(),
        path: '/'
      }
    
      res.setHeader("Cache-Control", "must-revalidate, no-store, max-age=0");
      res.setHeader("Pragma", "no-cache");
      res.setHeader("Expires", -1);
      res.redirect("https://my-login-page.com");
    })