我想在每次登录时更新用户的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);
});
});
});
}
));
答案 0 :(得分:1)
您可以将BasicStrategy
配置为将请求作为第一个参数传递:
passport.use(
new BasicStrategy({ passReqToCallback : true }, function(req, username, password, callback) {
...
})
);
这(遗憾地)没有很好的记录,但我相信大多数Passport策略都支持它(see also)。