Я пытался использовать connect-redis для использования экспресс-хранилища сеансов с AWS Elasticache. Сервер Redis в AWS, который я использовал, использует шифрование при передаче, шифрование в состоянии покоя и токен Redis AUTH.
я использую 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 (когда перед использованием SQLite с пакетом connect-sqlite3 у меня был req.user после входа в систему).
Я заметил, что в Redis ничего не сохраняется, когда я подключаюсь к серверу Redis и набираю KEYS * ключей нет. Однако, когда я пытаюсь установить ключ на сервере Redis, жестко закодированном в app.js, с помощью:
redisClient.set('ключ', 'значение')
Это установка ключа и значения на сервере (при вводе KEYS * мы видим это там). Таким образом, я успешно устанавливаю соединение с сервером Redis с клиентской библиотекой, однако, похоже, что-то там происходит, что я не настроил должным образом, поэтому сеансы сохраняются в Redis.
Я нахожусь в среде AWS (Elastic Beanstalk, Elasticache).
спасибо, что читаете и помогаете!
С наилучшими пожеланиями.