Ich entwickle derzeit eine MERN-Anwendung (MongoDB, Express, React, Node.js) und habe ein Problem beim Empfang von Cookies von einer Subdomain im Express-Backend. Ich habe CORS und die Cookie-Verwaltung eingerichtet und alles funktioniert gut, wenn ich einen einfachen Localhost-Ursprung verwende, habe aber Probleme beim Umgang mit Subdomains.
Hier ist eine Zusammenfassung der Schritte, die ich unternommen habe, und der Probleme, mit denen ich konfrontiert war:
Cookie setzen, wenn Sie angemeldet sind:
res.cookie("token", token, { httpOnly: wahr, sameSite: „none“, Weg: "/", sicher: wahr, });
Wenn ich versuche, dieses Cookie mithilfe der CORS-Einstellungen abzurufen, wobei der Ursprung lautet:
app.use( cors({ Herkunft: „http://localhost:3000“, Referenzen: wahr, }) );
Aber wenn ich beim Testen den Subdomain-Ursprung verwende, so:
app.use( cors({ Herkunft: „http://binbros.localhost:3000“, Referenzen: wahr, }) );
Es gibt keine Fehler mit CORS im Frontend und das Cookie wurde erfolgreich im Frontend erstellt. Wenn ich jedoch versuche, über diese CORS-Einstellung auf die Cookies zuzugreifen, erhalte ich keine Cookies. Aber mit der gleichen Methode und dem gleichen CORS-Setup für einen einfachen Localhost kann ich alle Cookies normal und ohne Probleme abrufen.
console.log(req.cookies);
P.S: Wenn ich auf localhost bin und origin localhost ist, und ich protokolliere das Cookie, Ich kann alle Frontend-Cookies abrufen, nicht nur das, das ich im Backend erstellt habe Aber Wenn ich mich in der Ursprungsdomäne der Subdomain befinde, erhalte ich nicht einmal ein Cookie im Backend. Keines von mir erstellt, noch eines aus dem Frontend
在像subdomain.localhost这样的开发环境中使用子域名时,由于浏览器安全策略的限制,可能会遇到额外的挑战。浏览器通常将不同的子域名视为独立的来源,这可能会影响到cookie和CORS的行为。
在开发环境中,secure属性最好设置为false。
检查你的系统hosts文件:
在前端检查是否从binbros.localhost域名调用API,并检查Access-Control-Allow-Credentials
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials