Passport.js, Экспресс-сессия Кросс-браузер с теми же учетными данными - PullRequest
0 голосов
/ 25 июня 2018

Я написал код с Passport.js для аутентификации.Когда пользователь вошел в систему chrome и использовал те же учетные данные, пользователь вошел в другой браузер 'FF'.

Как мы все знаем, Passport.js сохраняет все данные в req.users и req.session.passport.users.Если из одного браузера пользователь обновляет некоторые детали, как мы можем обновить в другом браузере req объект без выхода из системы?

Тот же тип, если администратор обновил данные пользователя1 и он уже вошел в систему, чем это повлияет?

Любая подсказка?

1 Ответ

0 голосов
/ 26 июня 2018

Как мы все знаем, Passport.js хранит все детали в req.users и

Не обязательно.passport.js не store пользовательские данные в req.user, но ваш passport.js код интеграции loads пользовательские данные из некоторого внутреннего хранилища и затем помещает его в объект запроса при каждом запросе.

Таким образом, вы должны обновить пользователя в бэкэнде и решить, когда извлекать новую версию (вместо просто десериализации jwt, например) для каждого запроса.

Пример кода из http://www.passportjs.org/docs/basic-digest/

passport.use(new BasicStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function (err, user) {
      if (err) { return done(err); }
      if (!user) { return done(null, false); }
      if (!user.validPassword(password)) { return done(null, false); }
      return done(null, user);
    });
  }
));

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

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

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

...