Express Session在Nginx上不持久

时间:2019-07-03 12:47:04

标签: javascript node.js express session nginx

在我的网站上,我包括使用Discord API登录并在用户服务器上保存用户会话的选项。这在本地可以很好地工作,但是当我将其部署到我的digitalocean服务器上时,它不起作用。

似乎正在发生的事情是,在本地,有一个cookie保存着一些我认为是指该会话的数据。永远不会在已部署的网站上创建或保存此cookie。当我在本地发出请求时,会话ID始终相同,在部署的网站上,每个请求的ID都不相同。

我已经尝试了几乎所有的答案,以在线找到有关此问题的信息。我已经设置并尝试了Nginx的每个代理头。我在Express服务器和Express Session上尝试了其他选项。

这些是默认选项

name

为生产而添加了这些

Node

我还使用护照使用DiscordStrategy

const sessionCfg: SessionOptions = {
  secret: secretConfig.sessionSecret,
  name: 'my-website-auth',
  resave: false,
  saveUninitialized: true,
  cookie: {
    maxAge: YEAR_IN_MS,
  },
};

...

app.use(session(sessionCfg));

这是Nginx块(之前已经尝试过注释行)

if (isProd) {
  // Trust first proxy
  app.set('trust proxy', 1);

  // Serve cookies over HTTPS
  sessionCfg.cookie.secure = true;
  sessionCfg.proxy = true;

  // Initialize Redis to store sessions
  const RedisStore = redisStoreInit(session);
  redisClient = redis.createClient();

  redisClient.on('error', (err) => {
    console.error('Redis error:', err);
  });

  redisClient.on('ready', () => {
    console.info('Redis ready');
  });

  sessionCfg.store = new RedisStore({
    host: '127.0.0.1',
    port: 6379,
    client: redisClient,
    ttl: 86400,
  });
}

我希望每个请求的会话ID都相同,因此用户在服务器上已通过身份验证。

发生的事情是,在每个请求上,会话都会更改。因此,无法验证用户。

0 个答案:

没有答案