Я использую Passport.js (локальный) с Firestore для создания серверной части сайта. Все работает нормально, пока не пришло время заняться управлением сессиями. Документ Passport.js Похоже, что сериализация и десериализация сеанса должны использоваться вместе с MongoDB. Нет никаких инструкций относительно того, как реализовать это на других БД NoSQL. Я пытался реализовать себя, что привело меня сюда.
Проблема в том, что каждый запрос, возвращаемый Firestore, имеет форму обещания, и я никак не могу получить доступ к результату вне класса .then()
и поэтому не могу их сериализовать и десериализовать для создания сеансов. идентификатор для отдельных пользователей. Кроме того, для меня просто невозможно просто позвонить user.id
, чтобы получить идентификатор документа из Firestore (но это совершенно нормально с MongoDB).
Есть ли в любом случае, что я могу получить сессионный функционал Passport.js для работы с Firestore?
Любая помощь будет принята с благодарностью.
Код полной длины см. В hastebin .
.
Какой официальный док. предлагает:
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
Ситуация, с которой я столкнулся:
passport.serializeUser(function(doc, done) {
done(null, doc.id);
});
passport.deserializeUser(function(doc_id, done) {
DBReg.doc(doc_id)
.get()
.then(doc => {
if (!doc.exists) {
console.log('Nope');
} else {
done(err, doc.data().name);
}
});
});
Функциональный (рабочий) вывод с использованием MongoDB при ведении журнала консоли req.session
:
Session {
cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true },
flash: {},
passport: { user: '5afa5ded957b8187e111f966' } }
Обратите внимание на последнюю строку, где она начинается с passport:
Вывод, который я получаю, используя Firestore:
Session {
cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true },
flash: {},
Теперь passport:
исчез
Не спрашивайте меня, почему я не использовал встроенную функцию аутентификации, предоставляемую Firestore. Это мой первый опыт работы с Firestore, и я собирался использовать его возможности для работы с базами данных; следовательно, из-за незнания кодовая база была уже сделана на 75%, когда я понял, что Goggle также предоставил функцию аутентификации специально для Firestore.