I'm sending a request to a node.js server from a reactjs client using axios as shown below.
import axios from 'axios'; const apiClient = axios.create({ withCredentials: true, baseURL: 'http://localhost:8080' }); async function(payload) { try { debugger; let result = await apiClient.post('/auth/signup/', payload); debugger; return result; } catch (error) { debugger; throw error; } } The node.js endpoint sets a cookie in the response as shown below.
const express = require('express'); const bodyParser = require('body-parser'); const cookieParser = require('cookie-parser') const cors = require('cors'); const jwt = require('jsonwebtoken'); router.use(bodyParser.json()); router.use(bodyParser.urlencoded({ extended: true })); router.use(cors({ origin: 'http://localhost:3000', credentials: true, exposedHeaders: ['Set-Cookie', 'Date', 'ETag']} )); router.use(cookieParser()); router.post('/signup', async (req, res, next) => { debugger; let database = req.app.locals.database; try { let user = await database.findByUsername(req.body.username); let token = await jwt.sign({username: user.username}, config.secret, {expiresIn: "15m"}); res.cookie('jwt', token, { maxAge: 900, }); } catch (error) { debugger; return res.status(503).send({ auth: false, message: 'Database error.' }); } }); The Set-Cookie header of the response contains the cookie as expected.
However, Chrome does not appear to be setting the cookie, as I cannot see the cookie in the Application window of the Developer Console.
I've looked at the answers to the following questions, which mention setting { withCredentials: true } in the axios configuration and not using a wildcard origin for cors in node.js, but I am already doing both.
Set-Cookie header not setting cookie in Chrome
Set cookies for cross origin requests
Any ideas as to why the cookie is not being set and how to fix this issue?

