Каким будет правильный способ управления несколькими логинами из одной учетной записи в nodejs, express.js?

Я использую экспресс-сеанс, паспорт и connect-mongo для сеансов сохранения в mongodb. мой package.json

 "dependencies": {        
        "axios": "^0.18.0",
        "bcrypt": "^3.0.5",
        "body-parser": "^1.18.3",
        "bootstrap": "^4.3.1",
        "chalk": "^2.4.2",
        "chart.js": "^2.8.0",
        "cheerio": "^1.0.0-rc.2",
        "clockwork": "^0.1.4",
        "compression": "^1.7.4",
        "connect-mongo": "^2.0.3",
        "dotenv": "^7.0.0",
        "errorhandler": "^1.5.0",
        "express": "^4.16.4",
        "express-flash": "^0.0.2",
        "express-handlebars": "^3.0.2",
        "express-session": "^1.15.6",
        "express-session-passport-cleanup": "^1.0.3",
        "express-status-monitor": "^1.2.3",
        "express-validator": "^5.3.1",          
        "lastfm": "^0.9.3",
        "lob": "^6.0.5",
        "lodash": "^4.17.11",
        "lusca": "^1.6.1",
        "mongoose": "^5.4.20",
        "morgan": "^1.9.1",
        "multer": "^1.4.1",
        "node-linkedin": "^0.5.6",
        "node-sass": "^4.11.0",
        "node-sass-middleware": "^0.11.0",
        "nodemailer": "^6.0.0",
        "passport": "^0.4.0", 
        "passport-local": "^1.0.0",   
        "pug": "^2.0.3",
        "request": "^2.88.0",
        "stripe": "^6.28.0",           
        "uuid": "^3.3.2",
        "validator": "^10.11.0"
    },

это работает нормально, и его возможны несколько входов в систему из одной учетной записи пользователя, в том же браузере в режиме инкогнито или с другими браузерами или на разных устройствах, но я не знаю, как правильно управлять этим. I, чтобы не создавать ошибок между сеансами одного и того же пользователя и с хранилищем корзины покупок.

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


person Juan Manuel    schedule 08.04.2019    source источник


Ответы (1)


Прежде всего, вы должны понять концепцию того, как работает сеанс.

У сеанса будет уникальный идентификатор, хранящийся на стороне клиента (называемый «идентификатором сеанса»). Этот идентификатор сеанса передается на веб-сервер каждый раз, когда браузер выполняет HTTP-запрос (т. Е. Ссылку на страницу или запрос AJAX). Веб-приложение сопоставляет идентификатор входящего сеанса с его внутренней базой данных (redis и т. Д.) И извлекает сохраненные переменные для использования запрошенной страницей.

Итак, если вы вошли в систему, используя одну и ту же учетную запись в другом браузере, сохраненная информация о сеансе будет уникальной (на основе идентификатора сеанса). Вам не нужно об этом беспокоиться.

person narayansharma91    schedule 08.04.2019
comment
спасибо за ответ @ narayansharma91, извините, если я плохо объясняю себя, что я думаю, что понимаю это, но все еще сомневаюсь 1 - существует ли какой-то стандарт для поддержки множественного входа для одного и того же пользователя? 2- Нужно ли ограничивать количество сеансов, в которые пользователь может войти одновременно? как максимум я имею в виду 3- Как мне заставить сеансы работать с последними данными корзины покупок? - person Juan Manuel; 08.04.2019
comment
Вы хотите сказать, что хотите отображать информацию о карточках покупок в обоих браузерах, если кто-то вошел в систему в разных браузерах, верно? - person narayansharma91; 09.04.2019
comment
если это одна из вещей, о которых я имел в виду, но я уже знаю, как это сделать, другая - это то, как я должен сделать так, чтобы, когда один из активных сеансов того же пользователя меняет пароль, другие сеансы становятся недействительными, выразите -сессия каким-либо образом справится с этим? Я могу сделать это самостоятельно, удалить активные сеансы, кроме того, который изменил пароль, но я не знаю, конфликтует ли это с экспресс-сеансом. Есть предложения? Спасибо за ответы - person Juan Manuel; 10.04.2019