【问题标题】:connect-redis not storing sessionconnect-redis 不存储会话
【发布时间】:2020-05-31 15:38:04
【问题描述】:

我一直在尝试使用 connect-redis 将快速会话存储与 AWS Elasticache 结合使用。 我在 AWS 上使用的 redis 服务器正在使用 Encryption in-transit、encryption at-rest 和 Redis AUTH token。

我正在使用带有本地策略的 Passport 来验证用户身份

这是我在 app.js 中配置它时的样子:

const express = require('express'),
  app = express(),
  session = require('express-session'),
  awsHandler = require('./awsHandler'),
  passport = require('passport'),
 ....
 ....

awsHandler.retrieveServiceCredentials('session').then(keys => {
    let secret = keys.session_key;
    let redis_auth = keys.redis_auth;
    const redis = require('redis');
    const redisClient = redis.createClient({
      host: 'master.redis-connect.abcd.efg.cache.amazonaws.com',
      port: REDIS_PORT,
      auth_pass: redis_auth,
      tls: { checkServerIdentity: () => undefined }
    });
    const redisStore = require('connect-redis')(session);

    app.use(session({
      secret: secret,
      resave: false,
      saveUninitialized: false,
      store: new redisStore({
        client: redisClient
      })
    }));
  });
  ....
  ....
  app.use(passport.initialize());
  app.use(passport.session());

问题是我尝试连接到我的网站,但我没有得到 req.session 或 req.user(在使用带有 connect-sqlite3 包的 SQLite 之前,登录后我有 req.user)。

我注意到当我连接到 Redis 服务器并键入 KEYS * 时,redis 中没有存储任何密钥。但是,当我尝试在 app.js 中硬编码的 Redis 服务器中设置密钥时:

redisClient.set('key', 'value')

它在服务器中设置键和值(当输入 KEYS * 时,我们可以在那里看到)。 因此,我确实使用客户端库成功建立了与 redis 服务器的连接,但是,那里似乎发生了一些事情,我没有正确配置,因此会话被存储在 Redis 中。

我在 AWS 环境中(Elastic Beanstalk、Elasticache)。

感谢您的阅读和帮助!

最好的问候。

【问题讨论】:

    标签: node.js amazon-web-services redis passport.js amazon-elasticache


    【解决方案1】:

    我解决了,这是我的代码中的一个问题: awsHandler.retrieveServiceCredentials 是一个异步函数,几秒钟后调用。 在流程中,它已经在初始化应用程序中的所有内容(初始化护照会话、定义路由、启动节点服务器以侦听端口等...),并且由于retrieveServiceCredentials 返回的时间较晚,因此顺序错误,并且它在我们使用 app.use(prodSessionMiddleware) 之前初始化了应用中的所有内容,因此会话不包含在应用中。

    我们每秒设置一个间隔,如果调用了“then”,则检查一个布尔值,如果调用了,我们清除间隔并继续我们的生活:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      • 2012-09-25
      • 2021-05-22
      • 2015-09-18
      • 2013-12-13
      相关资源
      最近更新 更多