我开发了一个应用程序,客户端使用 Vite + React,服务器端使用 Express.js。登录功能可在计算机和 Android 设备上无缝运行。但是,我在 iOS 上尝试从 Safari 登录时遇到了问题。经过彻底测试,验证登录状态时似乎未设置令牌 cookie(仅在 iOS 中)。
验证用户名和密码后我会这样做
const token = createAccessToken(user);
res.cookie("token", token, {
maxAge: 315360000,
sameSite: "None",
secure: true,
});
return res.status(200).json(user);
然后为了验证服务器上的令牌,我这样做
validateToken(token)
.then((user) => {
return res.status(200).json(user);
})
.catch(() => {
return res.status(401).json({ message: "Token invalido o expirado" });
});
最后,我的 CORS 选项
const corsOptions = {
origin: [
"http://localhost:5173",
"https://some_url.vercel.app",
"http://192.mi_ip:19006",
],
methods: "GET,HEAD,PUT,PATCH,POST,DELETE",
credentials: true,
optionsSuccessStatus: 204,
};
服务器始终返回 401 错误,经过大量测试,很明显令牌不存在。值得注意的是,该应用程序在其他平台上可以完美运行。
客户端托管在 Vercel 上,服务器托管在 Fly.io 上。我在 iOS (Safari) 上特别遇到了这个问题。
任何有关为何无法在 iOS 上设置令牌 cookie 的见解或建议将不胜感激。谢谢!
你发现问题了吗?