From 9b1827c863a7e3548d1888ef365ac35c9a05c09b Mon Sep 17 00:00:00 2001 From: Steven Tang Date: Fri, 22 Jan 2021 22:19:44 +1100 Subject: [PATCH] fix: update session on touch Resolves #351 --- src/index.js | 2 ++ test/legacy-tests.test.js | 20 ++++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/index.js b/src/index.js index 2a503b2..22573ef 100644 --- a/src/index.js +++ b/src/index.js @@ -348,7 +348,9 @@ module.exports = function(connect) { } if (session && session.cookie && session.cookie.expires) { + // new session, perform update updateFields.expires = new Date(session.cookie.expires) + updateFields.session = this.transformFunctions.serialize(session) } else { updateFields.expires = new Date(Date.now() + this.ttl * 1000) } diff --git a/test/legacy-tests.test.js b/test/legacy-tests.test.js index cfdb64c..323aeb4 100644 --- a/test/legacy-tests.test.js +++ b/test/legacy-tests.test.js @@ -525,14 +525,22 @@ describe('legacy tests', () => { test('test_session_touch', done => { getNativeDbConnection(async (store, db, collection) => { const sid = 'test_touch-sid' + // set original session const data = makeData() await store.set(sid, data) - const session = await collection.findOne({ _id: sid }) - assertSessionEquals(sid, data, session) - await store.touch(sid, session.session) - const session2 = await collection.findOne({ _id: sid }) - // Check if both expiry date are different - assert.ok(session2.expires.getTime() > session.expires.getTime()) + const sessionDoc = await collection.findOne({ _id: sid }) + const session = await store.get(sid) + assertSessionEquals(sid, data, sessionDoc) + // touch with new session + await store.touch(sid, makeData()) + // check if expiry dates are different + const session2Doc = await collection.findOne({ _id: sid }) + const session2 = await store.get(sid) + assert.ok(session2Doc.expires.getTime() > sessionDoc.expires.getTime()) + assert.ok( + new Date(session2.cookie.expires).getTime() > + new Date(session.cookie.expires).getTime() + ) cleanup(store, collection, done) }) })