在我的网站上,我包括使用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都相同,因此用户在服务器上已通过身份验证。
发生的事情是,在每个请求上,会话都会更改。因此,无法验证用户。