繁体   English   中英

如何在 firebase 云函数上正确使用 express-session

[英]How to properly use express-session on firebase cloud functions

您好,我正在尝试在部署到 firebase 云功能的后端中使用快速会话,并且我尝试使用快速会话来保存与当前 session 相关的数据。 但这不起作用,我使用 req.session.value = 5 保存了一些东西,然后我尝试获取该值,但它是未定义的。

这是我目前的快递 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());

我有一个中间件,可以根据某些条件设置值

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

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

和一个端点来获取 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()
})

问题是当我阅读 req.session.value 时它是未定义的,即使我在中间件中设置了它。

这在本地工作,但是当我部署到 firebase 函数时它不起作用。

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

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 云函数不允许多个 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM