我的应用程序分为客户端和服务器。客户端是托管在Now.sh上的前端Nextjs应用程序,服务器是由Express创建并托管在Heroku上的后端,因此域是client-app.now.sh和server-app.herokuapp.com。
认证方式
身份验证系统基于cookie,我正在使用快速会话来实现它。这是我的快速会话配置
app.use(
session({
store:
process.env.NODE_ENV === "production"
? new RedisStore({
url: process.env.REDIS_URL
})
: new RedisStore({
host: "localhost",
port: 6379,
client
}),
name: "sessionID",
resave: false,
saveUninitialized: false,
secret: keys.SESSION,
unset: "destroy",
cookie: {
domain:
process.env.NODE_ENV === "production"
? ".client-app.now.sh"
: "localhost",
secure: process.env.NODE_ENV === "production",
httpOnly: true,
maxAge: 7 * 24 * 60 * 60 * 1000
}
})
);
Cors设置了“ cors”包:
app.use(
cors({
origin:
process.env.NODE_ENV === "production"
? process.env.CLIENT_URL
: "http://localhost:3000",
credentials: true
})
);
客户端配置了Apollo,并且HttpLink中的“凭据”设置为“包含”。
问题是在开发中正确设置了具有会话ID的cookie,但在生产中未正确设置。这可能与我在不同域上托管客户端和服务器的事实有关吗?
经过大量时间尝试解决此问题后,我才找到解决方案:
所以我有
我删除了所有cookie对象,这解决了我的问题:
浏览器似乎不需要帮助来获取cookie。