为什么我的 Express 服务器不向使用 next.js/react 的前端发送 cookie?

问题描述 投票:0回答:1

所以我决定创建一个 Next.js 项目和一个用于护照身份验证的 Express 服务器(也许这不是一个好的选择?)。在本地开发中,我将输入我的登录信息,并在我的数据库上创建一个会话,并且护照将自动发送一个将在我的客户端设置的 cookie,从而允许应用程序进入仪表板页面。然而,将前端和后端上传到 Heroku,在两者上配置 ACM SSL,并使用以下 cors 和 express-session 设置后,cookie 根本不会在客户端设置(我在网络中没有看到 set-cookie 标头)选项卡,应用程序将我重定向回登录,因为那里没有 cookie)。

我的 cors 和快速会话配置:

app.use(
  expressSession({
    secret: process.env.SECRET_COOKIE_SESSION_KEY,
    resave: false,
    saveUninitialized: false,
    cookie: {
      httpOnly: false,
      secure: true,
      sameSite: "none",
      domain: "bloodsense-app-e540c8d285a0.herokuapp.com",
      path: "/", // Set the path to '/'
      maxAge: parseInt(process.env.MAX_COOKIE_AGE_MILLIS),
    },
    store: sessionStore, // Use the express-mysql-session store for session storage
  })
);

app.use(
  cors({
    origin: process.env.BASE_CLIENT_URL,
    methods: ["GET", "POST"],
    allowedHeaders: ["Content-Type", "Authorization"],
    exposedHeaders: ["X-Custom-Header", "Set-Cookie"],
    credentials: true,
    preflightContinue: true,
  })
);

注意:httpOnly: true 也不起作用。此外,省略域标志不会改变任何内容,但将其放在那里会导致网络选项卡中出现警告,指出该域相对于主机 url 无效。

以下是我的前端和后端应用程序供参考:

https://bloodsense-app-e540c8d285a0.herokuapp.com/login

https://bloodsense-backend-app-50ad20c4b656.herokuapp.com/

如有任何不清楚之处,请提前致歉。如果需要更多信息,请告诉我!

node.js heroku cookies https express-session
1个回答
0
投票

有几件事需要调查。为什么将 httpOnly 设置为 false?再想一想。
尝试在生产中的中间件之前将其添加到 Express 的 index.js/app.js 文件中

app.set('trust proxy', 1)
© www.soinside.com 2019 - 2024. All rights reserved.