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

我想在每次login时更新用户的IP地址。

我被告知只有中间件才能获得req,res和下一个参数,但是我使用了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); }); }); }); } )); 

您可以configurationBasicStrategy作为第一个parameter passing请求:

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

这(可惜)没有很好的logging,但我相信大多数护照战略支持( 另见 )。