我正在使用axios从reactjs客户端向node.js服务器发送请求,如下所示。
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;
}
}
如下所示,node.js端点在响应中设置了一个cookie。
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.' });
}
});
响应的Set-Cookie头包含了预期的cookie。
然而,Chrome似乎没有设置cookie,因为我在开发者控制台的应用程序窗口中看不到cookie。
我已经查看了以下问题的答案,其中提到在axios配置中设置{withCredentials:true}
并在node.js的cors中不使用通配符来源,但我已经两者都在做了。Chrome中Set-Cookie header not setting cookie。 为跨域请求设置cookie。
有什么想法,为什么cookie没有被设置,以及如何解决这个问题?