我应该如何在非中间件 (Passport.js) 中使用 req?
How should i use req inside non-middleware (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);
});
});
});
}
));
您可以配置 BasicStrategy
将请求作为第一个参数传递:
passport.use(
new BasicStrategy({ passReqToCallback : true }, function(req, username, password, callback) {
...
})
);
这(遗憾的是)没有很好的记录,但我相信大多数 Passport 策略都支持它 (see also)。
我想在他或她每次登录时更新用户的 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);
});
});
});
}
));
您可以配置 BasicStrategy
将请求作为第一个参数传递:
passport.use(
new BasicStrategy({ passReqToCallback : true }, function(req, username, password, callback) {
...
})
);
这(遗憾的是)没有很好的记录,但我相信大多数 Passport 策略都支持它 (see also)。