[英]How to properly use express-session on firebase cloud functions
Hello I am trying to use express sessions in my backend deployed to firebase cloud functions and I trying to use express-sessions to save data related to the current session.您好,我正在尝试在部署到 firebase 云功能的后端中使用快速会话,并且我尝试使用快速会话来保存与当前 session 相关的数据。 but this does not work, I save something using req.session.value = 5 and I try to get that value later and it is undefined.但这不起作用,我使用 req.session.value = 5 保存了一些东西,然后我尝试获取该值,但它是未定义的。
this is my current express session config.这是我目前的快递 session 配置。
const session = require('express-session')
const config = require('./config')
const { v4: uuidv4 } = require('uuid');
admin.initializeApp();
const api = require("./api/index");
const app = express();
//app.use(cookieParser());
//app.set('trust proxy',1)
const sess = {
secret: config.secretKey,
genid: function(req){
return uuidv4();
},
resave: true,
saveUninitialized: true,
cookie: {
sameSite: false
}
}
if(app.get('env')==='production'){
app.set('trust proxy',1)
sess.cookie.secure = true;
}
app.use(session(sess));
app.use(cors());
app.use(express.json());
and I have a middleware that sets the value based in some conditions我有一个中间件,可以根据某些条件设置值
// mymdileware
module.exports = (req, res,next)=>{
if(/* conditions */ ){
req.session.value = 5
next()
}
// other code here with a res.send()
})
and an endpoint to get the value of the session, and gets executed after the middleware和一个端点来获取 session 的值,并在中间件之后执行
app.get("/someEndpontToReadSession", mymdileware,(req, res)=>{
if(req.session.value===5){
// do something and return something to the user
}
// other code here with a res.json()
})
the problem is when I read req.session.value it is undefined, even though I set it in the middleware.问题是当我阅读 req.session.value 时它是未定义的,即使我在中间件中设置了它。
this works locally but It does not work when I deployed to firebase functions.这在本地工作,但是当我部署到 firebase 函数时它不起作用。
Edit: I thought the problem was related to that I am not providing a store to the session config, so I added it.编辑:我认为问题与我没有为 session 配置提供商店有关,所以我添加了它。 but I am still facing this problem: /但我仍然面临这个问题:/
const session = require('express-session')
const config = require('./config')
const { v4: uuidv4 } = require('uuid');
const {Firestore} = require('@google-cloud/firestore');
const {FirestoreStore} = require('@google-cloud/connect-firestore');
admin.initializeApp();
const api = require("./api/index");
const app = express();
//app.use(cookieParser());
//app.set('trust proxy',1)
const sess = {
secret: config.secretKey,
genid: function(req){
return uuidv4();
},
resave: false,
saveUninitialized: true,
cookie: {
sameSite: false
}
}
if(app.get('env')==='production'){
console.log('production : )');
app.set('trust proxy',1)
sess.store = new FirestoreStore({
dataset: new Firestore(),
kind: 'express-sessions'
})
sess.cookie.secure = true;
}
app.use(session(sess));
Firebase Cloud functions dont allow severals cookies Firebase Doc for their CDN cache, they allow just the cookie named __session so: Firebase 云函数不允许多个 cookies Firebase 文档用于他们的 CDN 缓存,它们只允许名为 __session 的 cookie,因此:
app.use(session({ name: "__session",
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: true,
cookie: {maxAge: 24 * 60 * 60 * 1000}, // 24 hours
store: sessionStorage}));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.