问题:
在弹性beanstalk上登录我部署的Node应用程序后,我从未收到过cookie,每当我通过浏览器刷新页面时,我都会被注销。
这是我的快速会话设置:
app.use(session({
store: new RedisStore({
client: redisClient,
host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT
}),
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false // No cookie received until successful login
}));
因此,当我能够"登录"时,我无法通过刷新进行持久会话,因为从未发送过cookie。
我排除了可能的原因:
Elasticache:我已经用redis建立了一个弹性缓存实例。
安全组:我已将其入站安全组配置为接受来自弹性beanstalk安全组的传入TCP连接。我甚至通过使用ssh连接到beanstalk,安装redis-cli以及成功连接到主端点来测试这一点。
负载均衡器:我的弹性beanstalk实例当前是单个节点,不使用负载均衡,但即使我使用应用程序控制的粘性会话负载平衡,结果也是一样的。
你们有什么想法可能有什么不对吗?
答案 0 :(得分:0)
问题出在我的配置中:
拥有"客户"作为新的RedisStore"的关键覆盖兄弟姐妹"主持人"和" port"密钥。
正确的配置如下:
const redisClient = redis.createClient({
host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT
});
app.use(session({
store: new RedisStore({
client: redisClient
}),
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false
}));