在node.js和redis中使用护照进行授权

时间:2014-01-20 18:22:37

标签: node.js redis authorization passport.js

我正在使用护照模块进行经典授权, 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);

0 个答案:

没有答案