我正在尝试为会话存储设置Redis,但是没有工作。我正在使用passport.js
和express-flash
,如果我尝试运行当前的Redis设置,它就无法工作:
var session = require('express-session');
var favicon = require('serve-favicon');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var redis = require("redis").createClient();
var RedisStore = require("connect-redis")(session);
var load = require('express-load');
var flash = require('express-flash');
var path = require('path');
var logger = require('morgan');
var i18n = require('i18n-2');
var passport = require('passport');
var mongoose = require('mongoose');
如果我使用此会话设置:
app.use(session({
secret: 'keyboard cat'
}));
这将显示一个错误,表示在生产中使用不安全,但passport.js
和快速闪存将起作用。
转到Redis:
app.use(session({
store: new RedisStore({
host: 54.94.171.197,
port: 3000,
client: redis
}),
secret: 'keyboard cat'
}));
我应该将静态IP放入主机并将3000放入端口吗?我对需要传递给新实例的正确值感到困惑。
这是我的中间件:
app.use(favicon(__dirname + '/public/images/icons/fav.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: false
}));
app.use(flash());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({
store: new RedisStore({
host: global.config.site.host,
port: 6379,
client: redis
}),
secret: 'keyboard cat'
}));
// Productions Middlewares
if (process.env.NODE_ENV === 'production') {
app.use(passport.initialize());
app.use(passport.session());
app.use('/admin', middleware.ensureAuthenticated);
app.use(middleware.ensureHttps);
}
答案 0 :(得分:1)
在代码中包含应用程序的配置是不好的做法。
使用类似nconf之类的内容来配置代码。
例如,您可以使用config.json
文件:
{
"sessionSecret": "cat something",
"redis": {
"host": "localhost",
"port": 6379
}
}
配置nconf
以查找配置文件
var nconf = require('nconf');
nconf.file({ file: '/path/to/config.json' })
然后使用会话中间件
中的配置app.use(session({
store: new RedisStore({
host: nconf.get('redis:host'),
port: nconf.get('redis:port'),
client: redis
}),
secret: nconf.get('sessionSecret')
}));