/ / redis session funktioniert nicht auf server - node.js, express, redis

Redis Session funktioniert nicht auf dem Server - node.js, express, redis

Ich verwende redis for session in meiner node.js-Express-App. Es funktioniert gut mit meiner Entwickler-Box, aber bei der Produktion scheinen Redis-Sitzungen nicht gespeichert zu werden.

Es wird kein Fehler angezeigt, außer dass ich mich nicht anmelden kann.

Redis läuft mit derselben Konfiguration. Aber wenn ich renne redis-cli und Typ "select 1"(die DB) und KEYS "*" Ich bekomme nichts

  var RedisStore = require("connect-redis")(express);

app.use(express.session({
store: new RedisStore({
host: cfg.redis.host,
db: cfg.redis.db
}),
secret: "sauce"
}));

cfg.redis.host ist localhost und cfg.redis.db ist 1

Dies ist der Fehler, den ich bekomme, wenn ich renne redis-cli monitor

Error: Protocol error, got "s" as reply type byte

Antworten:

1 für die Antwort № 1

Ein paar Vorschläge. Sind Sie sicher, dass Redis in der Produktion denselben Port und dasselbe Kennwort verwendet? Wenn Sie SSL mit einem Dienst wie Heroku verwenden, müssen Sie proxy: true setzen, um Express-Cookies zu behandeln, die nach einer früheren SSL-Beendigung eintreffen.

   .use(express.session({
store: new RedisStore({
port: config.redisPort,
host: config.redisHost,
db: config.redisDatabase,
pass: config.redisPassword}),
secret: "sauce",
proxy: true,
cookie: { secure: true }
}))

Ich benötige die folgende config.js-Datei, um die Redis-Konfigurationswerte weiterzugeben:

var url = require("url")
var config = {};
var redisUrl;

if (typeof(process.env.REDISTOGO_URL) != "undefined") {
redisUrl = url.parse(process.env.REDISTOGO_URL);
}
else redisUrl = url.parse("redis://:@127.0.0.1:6379/0");

config.redisProtocol = redisUrl.protocol.substr(0, redisUrl.protocol.length - 1); // Remove trailing ":"
config.redisUsername = redisUrl.auth.split(":")[0];
config.redisPassword = redisUrl.auth.split(":")[1];
config.redisHost = redisUrl.hostname;
config.redisPort = redisUrl.port;
config.redisDatabase = redisUrl.path.substring(1);

console.log("Using Redis store " + config.redisDatabase)

module.exports = config;