带有firebase的Node.js不会在Session中保存信息

时间:2018-01-19 21:20:38

标签: javascript node.js firebase session cookies

我正在尝试在我的应用中使用会话,以跟踪用户登录等等。

但是...

当我尝试使用最简单的方法时,我不断收到错误:

  

警告:connect.session()MemoryStore不是为生产环境设计的,因为它会泄漏内存,并且不会扩展到单个进程。

经过大量搜索后,我添加了firebase-session功能, 但是现在,即使我没有收到错误,也没有在会话中保存任何内容。

这是我的代码:

    const functions = require('firebase-functions');
    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(
        functions.config().firebase
    );

    const app = express();

    app.use(session({
      store: new FirebaseStore({
        database: ref.database()
      }),
      secret: 'asdfasgbrwewet53hnhwetynsy',
      resave: true,
      saveUninitialized: true
    }));

    app.get('/', function(req, res, next) {
      console.log(req.session);
      req.session.username='rakafa';
      res.send('Returning with some text');
    });

    app.get('/bar', function(req, res, next) {
      console.log(req.session);
      var someAttribute = req.session.username;
      res.send(`This will print the attribute I set earlier: ${someAttribute}`);
    });


    exports.app = functions.https.onRequest(app);

这是我到目前为止所做的:

换句话说,我刚刚开始学习Node.js,所以请尝试使用简单的例子,所以我会理解;)

请原谅我的失误

请帮助......

=== edit ===

根据orxelm的回答,我将ref更改为:

    const ref = firebase.initializeApp({
      //admin.credential.cert(serviceAccount)
      credential: firebase.credential.applicationDefault(),
      databaseURL: "https://*****.firebaseio.com/"
    });

但是,当我运行应用程序时,刷新页面后会话中没有任何内容。

sessions in the server ^^ 我可以看到该应用程序在服务器中创建了很多会话。 但他们都没有我在应用程序中添加的信息, 因为我只使用一个浏览器,所以应该只有一个会话,我错了吗?

2 个答案:

答案 0 :(得分:0)

你的firebase配置在哪里? 也许尝试以这种方式初始化firebase管理员:

 admin.initializeApp({
      credential: admin.credential.cert(serviceAccount),
      databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
 });

答案 1 :(得分:0)

我在使用 firebase 托管和函数时遇到了这个问题,但只需在会话中设置 name:"__session" 即可解决。

app.use(session({
  name:"__session,
  ...

添加此项后,在会话中保存值(如 req.session.username='rakafa')工作正常。