我正在使用Nodejs和ExpressJS。我的应用程序部署在Heroku上,我已经安装了“redistogo”插件来为我的应用程序提供服务。
我正在使用PassportJS帮助进行身份验证和会话管理。
我想使用redis来存储用户登录后的会话,以便如果应用程序重新启动,已登录的用户不会失去他的会话。
这是我的代码(简化后):
我正在使用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和PassportJS配合使用?