所以我决定创建一个 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/
如有任何不清楚之处,请提前致歉。如果需要更多信息,请告诉我!
有几件事需要调查。为什么将 httpOnly 设置为 false?再想一想。
尝试在生产中的中间件之前将其添加到 Express 的 index.js/app.js 文件中
app.set('trust proxy', 1)