Мои приложения работают с localhost и ngrok, но почему-то не работают с хостингом Firebase. В сети я проверил, что firebase не позволяет устанавливать и получать сеансы с использованием методов по умолчанию. Поэтому я использовал пакет npm и следовал инструкциям. https://www.npmjs.com/package/connect-session-firebase. Я успешно установил сеансы, но не смог их найти.
const functions = require('firebase-functions');
// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//
// exports.helloWorld = functions.https.onRequest((request, response) => {
// response.send("Hello from Firebase!");
// });
const express = require('express');
const session = require('express-session');
const FirebaseStore = require('connect-session-firebase')(session);
var firebase = require("firebase-admin");
const ref = firebase.initializeApp({
credential: firebase.credential.cert("**privateKeyJson**"),
databaseURL: 'https://my-db-link.firebaseio.com'
});
const app = express();
// pwa
const bodyParser = require('body-parser');
//
app.use(bodyParser.json());
app.set('trust proxy', true); // trust first proxy
app.use(session({
store: new FirebaseStore({
database: ref.database()
}),
name:"__session",
secret: 'keyboard cat',
resave: true,
saveUninitialized: false,
cookie: {maxAge : 60000,
secure: false,
httpOnly: false }
}));
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Origin', req.headers.origin);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
if(req.session){
res.header("mytoken",req.token);
}
next();
});
app.get('/', function (req, res, next) {
// Update views
console.log(req.session);
if(req.session){
req.session.mytoken = req.query.token;
}
// Write response
res.setHeader('Content-Type', 'application/json');
res.send("hello");
})
app.get("/sessions",function(req,res){
res.send(req.session);
})
app.get('/token', function (req, res, next) {
res.setHeader('Content-Type', 'application/json');
// Update views
if(req.session){
res.end(req.session.mytoken);
}
})
// Express body parser
app.use(express.urlencoded({
extended: true
}));
function addMyHeaders(req, res, next){
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Origin', req.headers.origin);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
next();
}
//Router
app.use('/public', express.static('public')).use(addMyHeaders);
exports.app = functions.https.onRequest(app);
Я проверил базу данных firebase, и она хранит сессии. Но я не уверен, как получить текущие сессии. Когда я go на URL-адрес / сессий, я получаю это только после установки сеанса с /? Token = test
{
cookie: {
originalMaxAge: 60000,
expires: "2020-01-10T06:17:19.035Z",
secure: false,
httpOnly: false,
path: "/"
}
}