我正在使用带有ExpressJS的Nodejs。我的应用程序部署在heroku上,我为我的应用程序安装了“redistogo”插件。
我正在使用PassportJS来帮助进行身份验证和会话。
我想在用户登录后使用redis存储会话,这样如果应用程序重新启动,登录用户就不会丢失会话。
这是我的代码(为简洁而剥离最少):
var RedisStore = require('connect-redis')(express);
app.configure('development', function () {
var redisUrl = url.parse(process.env.REDISTOGO_URL),
redisAuth = redisUrl.auth.split(':');
app.set('redisHost', redisUrl.hostname);
app.set('redisPort', redisUrl.port);
app.set('redisDb', redisAuth[0]);
app.set('redisPass', redisAuth[1]);
});
app.configure(function () {
app.use(express.session({
secret: 'My secret key',
store: new RedisStore({
host: app.get('redisHost'),
port: app.get('redisPort'),
db: app.get('redisDb'),
pass: app.get('redisPass')
})
}));
//Passport configuration
app.use(passport.initialize());
app.use(passport.session());
});
我在请求上使用request.isAuthenticated()
来验证用户是否已登录。
如果用户根据控制台语句登录,我看到登录成功。 PassportJS正确记录用户。但是,request.isAuthenticated()
返回false。
如果我删除redis代码并仅保留PassportJS代码,那么它可以完美运行。 我还应该做些什么来使用redis和PassortJS?
答案 0 :(得分:0)
你应该使用cookie的选项将其设置为false或ture,但建议为真
app.use(express.session({
secret: 'My secret key',
// add this line
cookie : {secure : true},
store: new RedisStore({
host: app.get('redisHost'),
port: app.get('redisPort'),
db: app.get('redisDb'),
pass: app.get('redisPass')
})
}));