我正在尝试在我的应用中使用会话,以跟踪用户登录等等。
但是...
当我尝试使用最简单的方法时,我不断收到错误:
警告: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 ^^ 我可以看到该应用程序在服务器中创建了很多会话。 但他们都没有我在应用程序中添加的信息, 因为我只使用一个浏览器,所以应该只有一个会话,我错了吗?
答案 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'
)工作正常。