我正在尝试像这样设置 Redis Store:
var express = require('express');
var app = express();
.......
.......
var session = require('express-session');
var redis = require("redis").createClient();
var RedisStore = require("connect-redis")(session);
app.use(session({
store: new RedisStore({
host: 'localhost',
port: 6379,
client: redis
}),
secret: 'keyboard cat'
}));
但是像这样使用 passport.js 将无法工作并且 express-flash
会抛出一个错误:`Error: req.flash() requires sessions.
我认为 Redis 根本无法正常工作。
我对配置也很困惑,我应该把 localhost 放在主机 key 中吗?我使用的是 Cloud 9,而不是我的本地主机。
我做错了什么?
最佳答案
不确定我能否在 passport.js 和 express-flash 方面为您提供帮助,但这就是我使用 express、redis 和 socket.io 设置 session 的方式:
var express = require('express');
var session = require('express-session');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var RedisStore = require('connect-redis')(session);
............
var cookieSecret = "secret phrase";
var sessionMiddleware = session({
store: new RedisStore({
host: '127.0.0.1',
port: 6379,
prefix: 'sess'
}),
secret: cookieSecret,
cookie: {httpOnly: true, secure: true}, //I'm using https, so you should remove secure: true
resave: true,
saveUninitialized: true
});
.....
app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser(cookieSecret));
app.use(sessionMiddleware);
....
var io = require('socket.io')(https);
io.use(function(socket, next) {
sessionMiddleware(socket.request, socket.request.res, next);
});
io.on('connection', function(socket){
console.log("connected");
console.log(socket.request.session);
});
希望对您有所帮助
关于javascript - 如何为 session 存储正确设置 redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28697889/