session.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /**
  2. *
  3. * @param {import("express").Request} req
  4. */
  5. async function all(req) {
  6. /** @type {sessionStore} */
  7. let store = req.sessionStore;
  8. return new Promise((done, reject) => {
  9. store.all((err, sessions) => {
  10. if (err) reject(err)
  11. else done(sessions);
  12. })
  13. })
  14. }
  15. /**
  16. *
  17. * @param {import("express").Request} req
  18. * @param {*} id session id
  19. * @returns
  20. */
  21. async function destroy(req, id) {
  22. /** @type {sessionStore} */
  23. let store = req.sessionStore;
  24. return new Promise((done, reject) => {
  25. store.destroy(id, (err, sessions) => {
  26. if (err) reject(err)
  27. else done();
  28. })
  29. })
  30. }
  31. /**
  32. * 根据用户id清空session
  33. * @param {import("express").Request} req
  34. * @param {*} uid user id
  35. */
  36. async function destroyUser(req, uid) {
  37. let sessions = await all(req);
  38. let userSessions = sessions.filter(ses => ses.user && ses.user._id == uid);
  39. for (var i = 0; i < userSessions.length; i++) {
  40. await destroy(req, userSessions[i].id);
  41. }
  42. }
  43. module.exports = { all, destroy, destroyUser }