Heroku to netlify session wont store session values

Viewed 8

This works fine when I am running it on Localhost3000(client) and localhost:3005(server). However once I publish my app to Heroku(server) and netlify(client) it for some reason tells me the req.session.steamuser when accessing /user is null even after it has been set in /api/auth/steam/return and I have tested that the req.session.steamuser=req.user accutally work.

Server.js

  var express = require('express');
var passport = require('passport');
var session = require('express-session');
var passportSteam = require('passport-steam');
const cors = require("cors");
var SteamStrategy = passportSteam.Strategy;
var app = express();
const corsOptions = {
    origin: ["https://stunning-bavarois-0eef55.netlify.app"],
    credentials: true, //access-control-allow-credentials:true
    methods: ["GET", "POST"],
};
app.use(cors(corsOptions));

passport.serializeUser((user, done) => {
    done(null, user);
});
passport.deserializeUser((user, done) => {
    done(null, user);
});
passport.use(new SteamStrategy({
    returnURL: 'https://temtestt.herokuapp.com/api/auth/steam/return',
    realm: 'https://temtestt.herokuapp.com/',
    apiKey: 'MY SECRET API KEY'
}, function (identifier, profile, done) {
    process.nextTick(function () {
        profile.identifier = identifier;
        return done(null, profile);
    });
}
));

app.use(session({
    secret: 'db5910cc8b9dcec166fda1d2c34860b6f8cd932cea641ea39924ed18fe6fc863',
    resave: true,
    
    saveUninitialized: true,
    cookie: {
        SameSite:"none",
        maxAge: 3600000,
        secure:true
    }
}))

// Initiate Strategy
app.use(passport.initialize());
app.use(passport.session());

app.get('/', (req, res) => {
    res.status(200);
    res.send("Welcome to root URL of Server");
});
app.get("/user", (req, res) => {
    if (req.session.steamuser) {
        res.status(200).send(req.session.steamuser)
    }
    else {
        res.send(false)
    }
})
app.get('/api/auth/steam', passport.authenticate('steam', { failureRedirect: '/' }), function (req, res) {
    res.redirect('/')
});
app.get('/api/auth/steam/return', passport.authenticate('steam', { failureRedirect: '/' }), function (req, res) {
    req.session.steamuser = req.user;
    res.redirect('https://stunning-bavarois-0eef55.netlify.app/')
});
app.listen(process.env.PORT || 3005);

Client

import { useEffect, useState } from 'react';
import './App.css';
import axios from 'axios';
function App() {
  const [user,setUser]=useState(null);
  
  useEffect(()=>{
    async function getUser(){
      const data = await axios.get("https://temtestt.herokuapp.com/user",{withCredentials:true});
      setUser(data.data);
    }
    getUser();
  },[]);
  return (
    <div className="App">
      <h1>Hello</h1>
      {(user===false||user===null)?<><p>Please log in</p><a href="http://temtestt.herokuapp.com/api/auth/steam/return">Login</a></>:<p>{user.displayName}</p>}
    </div>
  );
}

export default App;

As mentioned already it works fine when I do with localhost and returns correct values. But when I try with netlify and heroku it almost seems like it doesn't recognize the session key or something.

0 Answers
Related