我正在使用护照模块进行经典授权, redis 作为 node.js 中会话的持久性。 在登录后,会话很好地保存到我的redis,并且在登录后另一个请求到达时,redis中的ttl会很好地更新。
让我烦恼的是当我手动删除redis中的会话时(或者在没有会话时登录之前)其他请求(在登录时)正常传递。护照不应自动作为 unautorized 回复,或者我们应该以某种方式手动执行此操作?我应该在代码的哪一部分检查redis中的会话是否与我请求的cookie连接。
谢谢, 伊万
如果有人需要,这是我的代码:
// use local strategy
passport.use(new LocalStrategy(
function(username, password, done) {
var userPromise = userData.findByUsername(username);
userPromise.success(function(user){
if (!user) {
return done(null, false);
}
if ( user.password != security.hash(user.salt, password) ){ // check password
return done(null, false);
}
var userCookie = {
id : user.id,
username : username
}
return done(null, userCookie);
})
.error(function(err){
return done(err);
});
}
));
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
done(null, {id:id})
});
// adding express middleware for passport and redis store
app.use(express.session({
secret: "s0meR4nd0mT0k3n",
store : new RedisStore({
host : config.redis.host,
port : config.redis.port
//user : config.redis.username,
//pass : config.redis.password
}),
cookie : {
maxAge : 604800
}
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);