2016-03-15 3 views
0

Я установки базовой аутентификации пользователя с помощью этого http://mherman.org/blog/2015/01/31/local-authentication-with-passport-and-express-4/#.Vufc1fmLTIWСписок зарегистрированных пользователей в Экспресс приложение

В моем приложении мне нужно иметь список пользователей, которые в настоящее время авторизованы. Итак, я решил сохранить эта информация об объекте пользователя.

var Account = new Schema({ 
    username: String, 
    email: String, 
    online: {type: Boolean, default: false} 
}); 

var User = mongoose.model('Account', Account); 

Когда пользователь входит в систему I обновить онлайн собственности на пользователя объект «истина» и когда она выходит из к «ложным»:

router.post('/login', function(req, res, next) { 
    passport.authenticate('local', function(err, user, info) { 
     if (err) { 
     return next(err); 
    } 
    if (!user) { 
     return res.send({ success : false, info: info.message}); 
    } 
    req.login(user, loginErr => { 
     if (loginErr) { 
     return next(loginErr); 
    } 
    req.session.cookie.maxAge = 10 * 60 * 1000; 

    var id = user['_id']; 
    var update = {'$set': {'online' : 'true'}}; 
    var callback = function (err, data) { 
     if (err) return next(err); 
    }; 
    Users.findByIdAndUpdate(id, update, callback); 

    return res.send({ success : true}); 
    });  
    })(req, res, next); 
}); 

router.get('/logout', function(req, res) { 
     var id = req.user['_id']; 
     var update = {'$set': {'online' : 'false'}}; 
     var callback = function (err, data) { 
      if (err) return next(err); 
     }; 
     Users.findByIdAndUpdate(id, update, callback); 

    req.logout(); 
    res.redirect('/'); 
}); 

Все worsks просто отлично, но Мне нужно как-то установить на сайте на объекте пользователя до «false», когда cookie истекает. Пожалуйста помоги!

ответ

1

Единственные жизнеспособные варианты, которые я могу придумать на данный момент, и которые, как мне кажется, довольно распространены, - использовать таймаут, если не было вызвано никаких прямых действий для прекращения сеанса.

В зависимости от срока службы ваших файлов cookie вы можете установить тайм-аут на сервере (setTimeout), который приведет к аннулированию статуса сеанса/установки онлайн-статуса на значение false, если оно срабатывает. Если пользователь делает что-либо до тайм-аута триггеров, остановите таймаут и создайте новый (который в основном такой же, как и в вашем файле cookie).

Смежные вопросы