Я пытался решить проблему, когда запись сеанса в базе данных воссоздается после выхода из системы. После выхода из системы, предположительно из-за других запущенных запросов от внешнего интерфейса (angularjs), не только воссоздается документ коллекции сеансов, но и присутствуют те же свойства паспорта, что фактически означает, что сеанс пользователя не признан недействительным и может использоваться для входа в систему. Хотя текущий код (показан ниже), по-видимому, надежно удаляет команду cook ie на стороне внешнего интерфейса, вероятно, сохранение активного идентификатора сеанса является плохой идеей.
Одна вещь Следует отметить, что это поведение началось после настройки функции запомнить меня. Без установленного maxAge все, казалось бы, работало нормально, однако добавление следующего кода к успешному обратному вызову авторизации паспорта, при входе в систему для сеанса запомнить меня, эта ошибка начинает возникать. Кроме того, при установке на стороне angularjs расширенной задержки перед запуском выхода из системы это уменьшило вероятность этого (но в конечном итоге это выглядело очень плохо), так что это, вероятно, некоторые асинхронные запросы от системы. как-то инициализирую сессию.
if (rememberMe) {
req.session.cookie.maxAge = 155520000000
} else {
req.session.cookie.expires = false
}
Я уже много чего перепробовал, некоторые из которых, к сожалению, пока не смогу вспомнить. Три вещи, которые я пытался сделать, включают установку disableTouch: true, roll: false и unset: «destroy» в свойствах сеанса.
options = {
store: mongoStore,
secret: "some secret",
disableTouch: true,
rolling: false,
unset: "destroy"
}
Также я попытался установить для сеанса значение null, использовать req.session.destroy, а также обычный req.logout, а также комбинации всех трех. Затем, в конечном счете, я также попытался напрямую удалить документ сессий из базы данных, что успешно выполняется в соответствии с ответом, возвращенным из журналов, но документ все еще присутствует с обновленной датой истечения срока действия (предположительно, воссозданной). Вот текущая версия функции выхода из системы:
function logout (req, res) {
... some clearCookie invocations for other site specific things
req.logout()
console.log("start logout")
console.log(req.sessionID)
app.models.sessions.findOneAndRemove({ _id: req.sessionID }, function (err, data) {
if err
console.dir(err)
res.json 400, err
else
console.dir(data)
req.session = null
res.send(200)
}
}
В отношении версии код использует пакеты более старых версий, но, если возможно, предпочтительнее избегать обновлений, поскольку это старая система, построенная на этих сеансах. и в этот момент потенциальная поломка системы c проблематичнее, чем просто удаление функции запомнить меня. Вот версии:
- connect-mon go - 2.0.3
- express - 3.4.8
- , паспорт - 0.1.18
Есть ли какой-нибудь способ полностью предотвратить этот вид сеанса отдыха? Я не возражаю против того, чтобы у меня не было скользящего выдоха (что я и пытался сделать с прокруткой: ложь в любом случае).