Search code examples
node.jsreactjsexpressexpress-session

express-session - req.session not showing saved session


I am not able to view req.session saved data after storing userId after user logs in.

When I console.log the session from the login function I get the proper data...

Session {
  cookie:
   { path: '/',
     _expires: 2019-02-23T12:17:24.134Z,
     originalMaxAge: 7200000,
     httpOnly: true,
     sameSite: true,
     secure: false },
  userId: 4 }

But when I console.log(req.session) from other routes after that I get a new blank session

Session {
  cookie:
   { path: '/',
     _expires: 2019-02-23T12:12:47.282Z,
     originalMaxAge: 7200000,
     httpOnly: true,
     sameSite: false,
     secure: false } }

I am working on my localhost using React frontend on port 3000 and Node/Express with express-session and redis-connect. When I view my Redis I see the stored session properly.

This is my session code...

app.use(
  session({
    store,
    name: 'sid',
    saveUninitialized: false,
    resave: false,
    secret: 'secret',
    cookie: {
      maxAge: 1000 * 60 * 60 * 2,
      sameSite: true,
      secure: false
    }
  })
)

I have tried all different values for these options and nothing works. Please help!


Solution

  • The answer came from a mix of answers from RobertB4 https://github.com/expressjs/session/issues/374

    Apparently this problem is common when using CORS middleware and fetch api. In all of your fetch calls you need to send a credentials property set to 'include' and in your cors middleware you need to set an option to credentials: true. It is not good enough to do one or the other, you must do both...

    fetch('url', {
          credentials: 'include'
        })
    
    
    
    const corsOptions = {
      credentials: true
    }