【发布时间】: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