我已经使用React,Mongodb,Node和Express开发了一个应用程序,并且我正在使用会话进行身份验证。在后端,我可以成功地将cookie设置为一个存储userID的cookie,但是当我尝试使用axios从react应用发出请求时,不会发送userID会话数据。
这是我在后端的会话配置:
app.use(session({
name: SESS_NAME || "***",
secret: SESS_SECRET || "***",
saveUninitialized: false,
resave: false,
store: new MongoStore({
mongooseConnection: db,
collection: 'session',
ttl: parseInt(SESS_LIFETIME) / 1000 || (60 * 60 * 48) / 1000
}),
cookie: {
sameSite: true,
path: '/',
domain: APP_DOMAIN || 'localhost:4000',
secure: false, //NODE_ENV === 'production',
maxAge: parseInt(SESS_LIFETIME) || 60 * 60 * 48
}
}));
我的cors配置如下:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "http://localhost:4000");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.header("Access-Control-Allow-Credentials", true);
next();
});
const corsConfig = {
origin:['http://localhost:3000', 'http://localhost:4000' ],
methods:['GET','POST'],
credentials: true,
};
app.use(cors(corsConfig));
登录后,我在用户路由中设置了userID,我确认是通过控制台日志记录设置的:
req.session.userId = user._id;
这是我的应用程序发出的示例请求
axios.get('/user/auth', { withCredentials: true })
.then(response => {
...
请注意,我的应用程序在同一域中提供-我正在使用节点应用程序来提供React应用程序。我的文件夹结构类似于以下
- APP PARENT FOLDER
-CLIENT //Whole react app
-MODELS
-ROUTES
-SERVER.JS
-PACKAGE.JSON
-NODE_MODULES
我到处搜寻,并尝试了所有我能想到的...没有运气。我将不胜感激!
我已经检查了有关堆栈溢出的文章,并尝试实施修复程序,但是没有运气。我已经尝试了以下修复程序:
// in my index.js file
axios.defaults.withCredentials = true;
并添加
{ withCredentials: true }
针对我的所有请求
当我使用登录时创建的用户ID(例如:5d6b5d2b09f7d1332543ba90)并将其手动插入后端的用户Route时,一切正常。
当我在控制台上记录React应用程序发出的每个请求的会话时,它看起来像这样:
Session {
cookie:
{ path: '/',
_expires: 2019-09-05T05:38:09.657Z,
originalMaxAge: 172800,
httpOnly: true,
sameSite: true,
domain: 'localhost:4000',
secure: false },
}
何时应如下所示:
Session {
cookie:
{ path: '/',
_expires: 2019-09-05T05:38:09.657Z,
originalMaxAge: 172800,
httpOnly: true,
sameSite: true,
domain: 'localhost:4000',
secure: false },
userId: 5d6b5c2b03f7d5532543ba90 }