如何在生产中设置快速会话。 Express-session在https

问题描述 投票:0回答:1
中不起作用

我已经使用express-session和connect-mongo来存储会话,并且在开发环境中运行良好。但是,它不是在生产中持久化会话。登录后,可以通过console.log(req.sesssion)在服务器上获取会话。但是,如果我移到另一个URL,则该会话是不确定的。

const whitelist = ['https://example.com', 'https://www.example.com'];
const corsOptions = {
  origin(origin, callback) {
    if (whitelist.indexOf(origin) !== -1) {
      callback(null, true);
    } else {
      callback(new Error('Not allowed by CORS'));
    }
  }
};
app.use(cors(corsOptions));
app.use(session({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: true,
  store,
}));
node.js reactjs express express-session
1个回答
0
投票

搜索答案后,我花了大约一天的时间。最后,我发现了引起所有头痛的问题。该问题与http请求有关。我对请求使用axios,默认情况下,Axios不获取发送或接收的任何cookie。为了能够使用Cookie,我需要为我提出的每个请求传递Axios配置选项。{withCredentials: true}。多亏了post author

Axios.post(url, data, { withCredentials: true })...

但是,这导致我遇到另一个问题。

“标题中'Access-Control-Allow-Credentials'标头的值请求的凭据时,响应为“”,必须为“ true”模式为“包含”。“

然后我将credentials: true添加到了我的cors()模块like so

const corsOptions = {
  origin(origin, callback) {
    if (whitelist.indexOf(origin) !== -1) {
      callback(null, true);
    } else {
      callback(new Error('Not allowed by CORS'));
    }
  },
  credentials: true
};

现在我的项目已经上线了,正在为用户服务,使他们的生活更轻松:)。

© www.soinside.com 2019 - 2024. All rights reserved.