使用Firebase的Node.js无法在Session中保存信息。

4
我正在尝试在我的应用程序中使用会话来跟踪用户登录等信息。
但是...
当我尝试使用最简单的方法时,我一直收到以下错误:
警告: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,请尝试使用简单的示例,以便我能够理解;)

请原谅我的错误

请,帮帮我....

=== 编辑 ===

根据orxelm的答案,我将我的ref更改为以下内容:

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

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

服务器上的sessions ^^ 我可以看到应用程序在服务器上创建了许多会话。 但是它们中没有一个会话包含我在应用程序中添加的信息, 而且由于我只使用一个浏览器,应该只有一个会话,难道我错了吗?


1
我也遇到了同样的问题。有人能帮我解决这个问题吗? - Gaurav Agrawal
2个回答

1
我曾经遇到过这个问题,当我使用Firebase托管和函数时,但是可以通过在会话中设置name:"__session"来解决。
app.use(session({
  name:"__session,
  ...

在添加此代码后,像 req.session.username='rakafa' 这样将值保存在会话中就可以正常工作了。请注意,保留HTML标签。

0
你的 Firebase 配置在哪里? 或许可以尝试以这种方式初始化 Firebase 管理员:

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

这种方法对我从数据库获取数据很有效,但我会尝试你说的方法。那么,我在哪里可以找到凭据? - Rakkefet
“admin”来自哪里?它和我使用的“firebase”一样吗? - Rakkefet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接