【问题标题】:How to set up express-session in production. Express-session is not working in https如何在生产中设置快速会话。快速会话在 https 中不起作用
【发布时间】:2020-04-28 20:34:37
【问题描述】:

我使用 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】:

    在寻找答案后,我花了大约一天的时间。最后,我发现了引起所有头痛的问题。该问题与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
    };
    
    

    现在我的项目已经上线并为用户提供服务,让他们的生活更轻松:)。

    【讨论】:

      猜你喜欢
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 2013-03-15
      • 2013-11-07
      • 2023-03-15
      • 1970-01-01
      • 2016-07-06
      相关资源
      最近更新 更多