我应该如何在非中间件(Passport.js)中使用req?

时间:2015-06-11 16:51:20

标签: node.js express passport.js

我想在每次登录时更新用户的IP。

我被告知只有中间件获得req,res和next参数,但我使用的是passportjs,应首先授权用户。我该如何更新用户数据?

以下是使用基本策略的passport.js的代码块。

passport.use(new BasicStrategy(
    function(username, password, callback){
        User.findOne({username:username}, function(err,user){
            if(err){return callback(err);}
            //no user found with the email
            if(!user){return callback(null, false);}
            user.verifyPassword(password, function(err,isMatch){
                if(err){ return callback(err);}
                // password did not match
                if(!isMatch){return callback(null,false);}
                //success

                // UPDATE USER INFO
                user.token = jwt.sign(user.email+Date.now(), "testtoken");//should change later
                user.last_login = Date.now();

                // I AM TRYING TO UPDATE THIS WITH req.ip
                user.last_ip = req.ip;

                user.save(function(err, user1){
                    if(err) return callback(err);
                    return callback(null,user);
                });
            });
        });
    }
));

1 个答案:

答案 0 :(得分:1)

您可以将BasicStrategy配置为将请求作为第一个参数传递:

passport.use(
  new BasicStrategy({ passReqToCallback : true }, function(req, username, password, callback) {
    ...
  })
);

这(遗憾地)没有很好的记录,但我相信大多数Passport策略都支持它(see also)。