如何在Firebase Cloud功能上正确使用明上文

发布于 2025-02-07 15:20:45 字数 2321 浏览 1 评论 0 原文

您好,我试图在部署到Firebase Cloud功能的后端中使用明确的会话,并且我尝试使用快速课程来保存与当前会话相关的数据。但这是行不通的,我使用req.session.value = 5保存一些东西,我会尝试以后获得该值,但它是未定义的。

这是我当前的Express会话配置。

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());

而且我有一个中间件,该中间软件在某些条件下设置了值

// mymdileware
module.exports = (req, res,next)=>{
if(/* conditions */ ){
req.session.value = 5
next()
}

// other code here with a res.send() 
})

,并且一个终点以获取会话值,并且在中间件之后被执行

 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()
})

。在中间软件中。

这在本地起作用,但是当我部署到Firebase功能时,它不起作用。

编辑:我认为问题与我没有为会话配置提供商店有关,所以我添加了它。 但是我仍然面临这个问题: /

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));

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. 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.

this is my current express session config.

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

 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.

this works locally but It does not work when I deployed to firebase functions.

Edit: I thought the problem was related to that I am not providing a store to the session config, so I added it.
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));

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

音栖息无 2025-02-14 15:20:45

firebase云功能不允许cookie firebase doc 他们只允许cookie命名为__Session:

app.use(session({ name: "__session",
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: true,
cookie: {maxAge: 24 * 60 * 60 * 1000}, // 24 hours
store: sessionStorage}));

Firebase Cloud functions dont allow severals cookies Firebase Doc for their CDN cache , they allow just the cookie named __session so :

app.use(session({ name: "__session",
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: true,
cookie: {maxAge: 24 * 60 * 60 * 1000}, // 24 hours
store: sessionStorage}));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文