Axios没有发送会话数据

时间:2019-09-05 06:05:59

标签: node.js reactjs mongodb express axios

我已经使用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 }

0 个答案:

没有答案