So verwenden Sie CORS, um das Setzen von Cookies zu ermöglichen
P粉765684602
2023-08-29 17:26:51
<p>Ich habe mir andere verwandte Beiträge angesehen, aber keiner davon hat für mich funktioniert. Ich verwende Vue auf der Clientseite und Node auf der Serverseite. </p>
<p>Ich habe den in anderen Beiträgen vorgeschlagenen Ansatz mit der Cors-Bibliothek ausprobiert, ohne Erfolg.
Man könnte meinen, dass der folgende Code es mir ermöglichen würde, Anfragen vom localhost:8080 des Clients an den localhost:3000 des Servers zu senden, aber alle Anfragen schlagen fehl. </p>
<pre class="brush:php;toolbar:false;">const cors = require("cors");
if (process.env.ENV !== "prod") {
let corsOptions = {
Herkunft: ["http://localhost:8080"],
Referenzen: wahr,
OptionenErfolgsstatus: 200,
};
app.use(cors(corsOptions));
}</pre>
<p>Dies ist der Controller, den ich zum Setzen von Cookies verwende. </p>
<pre class="brush:php;toolbar:false;">router.route("/login").post(async (req, res) => {
//Benutzer authentifizieren
const user = waiting Users.findOne({ where: { email: req.body.email } });
if (user == null) {
return res.status(400).send("Benutzer nicht gefunden!");
}
versuchen {
if (await bcrypt.compare(req.body.password, user.password)) {
const userInfo = {
Benutzername: user.username,
E-Mail: user.email,
Alter: user.age,
};
const accessToken = genericAccessToken(userInfo);
const REFRESH_TOKEN_SECRET = jwt.sign(userInfo, process.env.REFRESH_TOKEN_SECRET);
res.cookie("token", accessToken, {
maxAlter: 300000,
sicher: wahr,
httpOnly: wahr,
sameSite: „none“,
});
res.status(200).send("Anmeldung erfolgreich!");
} anders {
res.send("E-Mail-Adresse oder Passwort ist falsch!");
}
} fangen {
res.status(500).send();
}
});</pre>
<p> Grundsätzlich greift jede Antwort auf dieser Website auf app.use(cors) zurück, aber aus irgendeinem Grund funktioniert das bei mir nicht. </p>
这可能是因为对于跨域的cookie,您设置了{sameSite:true}和{secure:true},但在您的示例中,您是在http://localhost上进行的,因此不会设置任何cookie。请参考以下链接以获取要求。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite#samesitenone_requires_secure
还要设置正确的头部,例如Access-Control-Allow-Credentials,Access-Control-Allow-Origin,Access-Control-Allow-Headers
您可以使用mkcert来参考在本地主机上进行安全连接。
我还建议在前端和后端使用相同的顶级域,并使用子域。
这里还要注意的一点是,如果域名中有端口,我认为Chrome不会设置cookie,请尝试一下。
我成功解决了这个问题,以便后来的人可以找到答案。我将cookieparser的声明移到了初始化sequelize连接的位置之前。我还在我的axios post请求中添加了withCredentials选项。通过这两个步骤,我的cookie现在都正确设置并且可以访问。