Когда у меня есть следующее, сеансы сохраняются, и страница подсчитывает количество посещений.
app.set('trust proxy', true)
// The documentation specifies '1' instead of 'true'
app.use(session({
secret: 'my secret',
proxy: true,
resave: false,
saveUninitialized: true,
cookie: { secure: false }
}))
app.listen(3000, function(){
console.info("Server is connected!");
});
app.get("/login", (req, res) => {
if (req.session.page_views){
req.session.page_views++;
res.send("You visited this page " + req.session.page_views + " times");
} else {
req.session.page_views = 1;
res.send("Welcome to this page for the first time!");
}
});
Однако, когда я удаляю app.listen(3000, ...) и вместо этого запускаю localhost с помощью команды firebase serve в интерфейсе командной строки, сеансы не сохраняются.
Я также пробовал работать в производственной среде через firebase deploy, но, опять же, сеансы не сохраняются.
Я пробовал несколько вариантов на app.use(session({ и считаю, что решение может быть там.
Какие-нибудь рекомендации?
ОБНОВИТЬ
const express = require('express');
const session = require('express-session');
const FirestoreStore = require('firestore-store')(session);
const bodyParser = require('body-parser');
app.use(cookieParser('My secret'));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(session({
store: new FirestoreStore({
database: firebase.firestore()
}),
secret: 'My secret',
resave: true,
saveUninitialized: true,
cookie: {maxAge : 60000,
secure: false,
httpOnly: false }
}));



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вы используете хостинг firebase, вы также можете использовать коннектор, который соединяет ваш экспресс-сеанс с firebase.
Вы можете попробовать промежуточное ПО подключение-сеанс-firebase, которое интегрирует хранилище базы данных firebase с текущим экспресс-сеансом. Это может решить вашу проблему с сохранением сеанса.
Обновлено:
Если вы используете хостинг firebase и облачные функции, вы можете установить только файл cookie с именем __session. Возможно, вам придется использовать это имя для сохранения сеансов на хостинге firebase.
app.use(session({
store: new FirestoreStore({
database: firebase.firestore()
}),
name: '__session',
secret: 'My secret',
resave: true,
saveUninitialized: true,
cookie: {maxAge : 60000,
secure: false,
httpOnly: false }
}));
Для получения дополнительной информации:
@rgoncalv откройте для этого запрос об ошибке на github и свяжите его со своим ответом.
Я кое-что предложу, вместо того, чтобы использовать этот Магазин огня, я предлагаю вам использовать этот FirebaseStore.
И я заметил, что вы используете Express, поэтому вы можете проверить использование ниже:
ПРИМЕЧАНИЕ: в Express 4 экспресс-сессия должна быть передана в функцию connect-session-firebase exports, чтобы расширить экспресс-сессию.
const express = require('express');
const session = require('express-session');
const FirebaseStore = require('connect-session-firebase')(session);
const firebase = require('firebase-admin');
const ref = firebase.initializeApp({
credential: firebase.credential.cert('path/to/serviceAccountCredentials.json'),
databaseURL: 'https://databaseName.firebaseio.com'
});
express()
.use(session({
store: new FirebaseStore({
database: ref.database()
}),
secret: 'keyboard cat'
resave: true,
saveUninitialized: true
}));
И вы также можете действительно рассмотреть Безопасность, предоставляемый этой зависимостью
If you use a publicly available Firebase Database, please set proper rules:
{
"rules": {
".read": "false",
".write": "false",
"sessions": {
".read": "false",
".write": "false"
},
"some_public_data": {
".read": "true",
".write": "auth !== null"
}
}
}
Вы можете узнать больше о Правила Firebase и подключение-сеанс-firebase
Я использовал это заранее, и он сохранял сеансы в базе данных реального времени. Хотя та же проблема. Однако в обоих случаях я не помещал учетные данные или URL-адрес базы данных в initializeApp(), потому что я всегда использовал все, что мне было нужно (хранилище, Firestore) с Admin SDK, просто нужно было вызвать initializeApp(). Я просто попытался сделать это, хотя следуя этому firebase.google.com/docs/admin/setup#add_firebase_to_your_ap p, и я загрузил файл json, но он не может его распознать. Как следует форматировать path/to?
Не могли бы вы сделать образец кода (такой же простой, как подсчет просмотров страниц), чтобы посмотреть, сможете ли вы заставить его работать?
Я использовал это. Магазина действительно не хватало. Теперь я могу видеть, что сеансы сохраняются в базе данных Firebase, но все же каждый раз, когда я обновляю страницу, создается новый сеанс. Кажется, браузер не может сопоставить cookie и создает новый сеанс. Как решить эту проблему?