Чтение сеанса express firebase с использованием https://www.npmjs.com/package/connect-session-firebase - PullRequest
0 голосов
/ 10 января 2020

Мои приложения работают с 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: "/"
}
}
...