당신이 이미 단지.
이 방법으로 로깅의 목적을 위해 스키마에서 새로운 정적을 정의하지 왜 몽구스를 사용하여 당신이 함께 코드를 유지하는 경우. 최상위 레벨은 $ 집합 연산으로 findOneAndUpdate 방법으로 업데이트 쿼리를 처리에서
또한 .. 내가 강하게 ... 그래서 필요이
query = { $set : { 'last_login_date' : Date.now() } }
..하지만 그런 짓을하지 않으려면, 몽구스을 알고 확실하게 $ set 연산을 사용하여 다른 드라이버 나 플러그인으로 전환하면 여전히 모든 쿼리를 유지할 수 있습니다. 하지만 그것은 단지 개인적인 습관 일뿐입니다. Mongo Shell을 사용한다면 업데이트에 $ set을 사용하는 것을 잊어 버리면 원하지 않는 결과를 얻게됩니다.
그래서 난 당신이 마지막 로그인 날짜를 설정하고 당신이 여권에 매번 사용자가 로그인을 사용할 수 있도록 업데이트 된 문서를 반환하는 사용자 스키마의 정적을 정의하는 것이 좋습니다 것입니다.
스키마의 모습 이 :
var UserSchema = mongoose.Schema({
username: {
type: String,
required: true,
unique: true,
index: true
},
password: {
required: true,
type: String
},
creation_date: {
type: Date,
default: Date.now
},
last_login_date: {
type: Date,
default: Date.now
}
});
UserSchema.statics.login = function login(id, callback) {
return this.findByIdAndUpdate(id, { $set : { 'last_login_date' : Date.now() }, { new : true }, callback);
};
이 방법을 사용하면 세션에서 사용자를 얻고 last_login_date를 바로 업데이트 할 수 있습니다.
또한 Ankit Rana와 같은 deserializeUser 메소드에이 메소드를 삽입하는 것이 좋습니다. 이렇게하면 req.user 객체에 업데이트 된 last_login_date가 포함됩니다.
게시 한 코드에서 last_login_date 만 업데이트하지만 업데이트 된 문서는 반환하지 않습니다. 따라서 req.user에는 이전 세션의 last_login_date가 남아 있습니다. 이를 콘솔에 인쇄하여 확인할 수 있습니다.
console.log(req.user.last_login_date); //last_login_date will not be updated
res.json('Welcome ' + req.user.username);
그래서 그것을 밖으로 시도하고 저를하자이
router.post('/login',
passport.authenticate('local'),
function(req, res) {
// if login is successfull, the following message will be displayed
res.json('Welcome ' + req.user.username);
처럼 passport.authenticate 방법의 모든 업데이트 방법을 제거하고이
passport.deserializeUser(function(id, done) {
User.login(id, function(err, user) {
if(err) return done(err, null);
done(err, user);
});
});
에 passport.deserializeUser 방법을 변경 무언가가 작동하지 않거나 명확하지 않은지 확인하십시오.
"last_login_time"및 "l ast_logout_time "내 응용 프로그램/ –
Ok ... 더 자세한 정보를 제공 할 수 있습니까? –