我正在尝试像这样设置Redis商店:
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
会抛出错误:`错误:req.flash()需要会话。
我相信Redis根本不工作。
我也很混淆配置,我应该将localhost放在主机密钥中吗?我使用的是Cloud 9,而不是我的localhost。
我做错了什么?
答案 0 :(得分:0)
我不确定我可以用passport.js和express-flash帮助你,但这就是我用express,redis和socket.io建立会话的方式:
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);
});
希望这有点帮助
答案 1 :(得分:0)
有类似的问题。是的,您可能没有为您创建的客户端运行Redis服务器。尝试在你的机器上安装并运行redis-server,这对我来说很有用。