Discovery 2. Cookieは要求に自動的に含まれません.
7735 ワード
問題の状況
サーバは、
res.session.save()
メソッドを使用して、クライアントapi要求に関する情報をセッションに格納する.問題は、方法が機能しないことであり、res.session
は初期化を継続する.module.exports = {
post: async (req, res) => {
const userInfo = await Users.findOne({
where: { userId: req.body.userId, password: req.body.password },
});
if (!userInfo) {
res.status(400).send({ message: "not authorized" });
} else {
req.session.save(function () {
req.session.userId = userInfo.userId;
res.send({ data: userInfo, message: "ok" });
}); // session이 저장되지 않는 문제 발생.
}
},
};
解決策
問題はcors設定にあります.cors optionsを使用して
credentials: true
を追加し、クライアントapiリクエストヘッダにwithCredentials: true
を追加すると、res.session.save()
メソッドは正常に動作し、クッキーもサーバに渡される.//server
app.use(
cors({
origin: "https://localhost:3000",
methods: ["GET", "POST", "OPTIONS"],
credentials: true,
})
);
//client
const handleLogout = (logoutHandler) => {
axios
.post("https://localhost:4000/users/logout", null, {
"Content-Type": "application/json",
withCredentials: true,
})
.then((res) => {
logoutHandler();
});
};
CORSは、クライアント自身が他のソースからのリクエストを拒否するポリシーであり、サーバ上でCORSオプションを設定することで、設定値に基づいて他のソースからのリクエストに対して対応するリクエストを実行することができます.同じ起源ではhttp通信を行うとクッキーが自動的にリクエストヘッダに入る.ただし、異なるソースのhttp通信では、リクエストヘッダにクッキーは自動的に含まれません.リクエストヘッダにクッキーがない場合、サーバはクライアントを認識できないため、リクエストヘッダにクッキーを含めるように個別に設定する必要があります.
このとき、サーバは
credentials:true
に設定され、クライアントはwithCredentials: true
に設定される.Reference
この問題について(Discovery 2. Cookieは要求に自動的に含まれません.), 我々は、より多くの情報をここで見つけました https://velog.io/@pca0046/Discovery-2.-쿠키는-요청에-자동으로-포함되지-않는다テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol