【问题标题】:FireStore + Cloud Run strips my cookie named __sessionFireStore + Cloud Run 剥离了我名为 __session 的 cookie
【发布时间】:2022-01-24 16:21:59
【问题描述】:

我正在使用express-session 在我的 Express+NodeJS 后端应用程序中管理会话。我使用 Firebase 进行身份验证,使用 Cloud Run 托管我的服务器。根据 Cloud Run 托管的文档,唯一允许的 cookie 是 __session。只有当我在用户登录时在我的响应中明确设置我的 cookie 时,它​​才能工作。

res.setHeader("Set-Cookie", req.session);
res.cookie(
  "__session",
  { something: "something" },
  {
    expires: new Date(Date.now() + 900000),
    httpOnly: true,
    sameSite: "none",
    secure: true,
  }
);
res.setHeader("Cache-Control", "private");

但是,我想要实现的是我想在index.js 的应用初始化中设置这个__session cookie,它可以在本地工作。

app.use(
  session({
    name: "__session",
    secret: process.env.SECRET_SESSION_KEY,
    resave: false,
    saveUninitialized: true,
    store: sessionStore,
    cookie: {
      maxAge: 1000 * 60 * 60 * 24,
      httpOnly: true,
      sameSite: process.env.NODE_ENV === "development" ? "lax" : "none",
      secure: process.env.NODE_ENV === "development" ? false : true,
    },
  })
);

但是,在我的生产应用程序中,没有在响应标头和 cookie 存储中设置 cookie。理论上,我将 cookie 名称设置为 __session,但由于某种原因 Firestore/Cloud Run 将其删除。我究竟做错了什么?感谢任何帮助,我第三天试图解决这些问题。

【问题讨论】:

    标签: firebase express cookies google-cloud-firestore google-cloud-run


    【解决方案1】:

    我不确定你是否关注了这个guide,但有一些要点可以帮助你。我建议阅读它并尝试添加端点、HTTPS 和中间件。关于 __session cookie,如here 所述,您可以尝试几种故障排除路径。我会读一读,看看是否有任何这些情况是原因,因为我无法在您传递的代码中看到任何这些情况。 它在本地工作的原因是缓存没有分解。另一个可能的原因是在用户登录之前正在初始化索引。

    你也可以试试这个代码,看看它是否有效:

    // functions/index.js
    const functions = require('firebase-functions');
    
    exports.cookie = functions.https.onRequest((req, res) => {
      if (req.path === '/cookie') {
        res.set({
          'Set-Cookie': '__session=testtesttest; Max-Age=600',
          'Cache-Control': 'private'
        });
        res.send('set cookie');
      } else if (req.method === 'GET') {
        res.send(req.headers.cookie);
      }
    });
    
    //firebase.json
    {
      "hosting": {
        "rewrites": [
          {"source": "**", "function": "cookie"}
        ],
        "public": "public"
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      • 2022-08-05
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多