CORS を使用して Cookie の設定を許可する方法
P粉765684602
P粉765684602 2023-08-29 17:26:51
0
2
372
<p>他の関連投稿も見ましたが、どれもうまくいきませんでした。私はクライアント側で vue を使用し、サーバー側でノードを使用します。 </p> <p>cors ライブラリを使用して、他の投稿で提案されているアプローチを試しましたが、成功しませんでした。 次のコードを使用すると、クライアントの localhost:8080 からサーバーの localhost:3000 にリクエストを送信できると思う人もいるかもしれませんが、すべてのリクエストは失敗します。 </p> <pre class="brush:php;toolbar:false;">const cors = require("cors"); if (プロセス.env.ENV !== "本番") { let corsOptions = { 発信元: ["http://localhost:8080"]、 資格情報: true、 オプション成功ステータス: 200、 }; app.use(cors(corsOptions)); }</pre> <p>これは Cookie を設定するために使用するコントローラーです。 </p> <pre class="brush:php;toolbar:false;">router.route("/login").post(async (req, res) => { // ユーザーを認証する const user = await Users.findOne({ ここで: { email: req.body.email } }); if (ユーザー == null) { return res.status(400).send("ユーザーが見つかりません!"); } 試す { if (await bcrypt.compare(req.body.password, user.password)) { const userInfo = { ユーザー名: ユーザー.ユーザー名、 電子メール: user.email、 年齢: ユーザーの年齢、 }; const accessToken =generateAccessToken(userInfo); const freshToken = jwt.sign(userInfo, process.env.REFRESH_TOKEN_SECRET); res.cookie("トークン", accessToken, { maxAge: 300000、 安全: true、 httpOnly: true、 同じサイト: "なし"、 }); res.status(200).send("ログイン成功!"); } それ以外 { res.send("メールアドレスまたはパスワードが間違っています!"); } } キャッチ { res.status(500).send(); } });</pre> <p> 基本的にこのサイトのすべての答えは app.use(cors) に戻りますが、何らかの理由でそれは私にとっては機能しません。 </p>
P粉765684602
P粉765684602

全員に返信(2)
P粉514001887

これは、クロスドメイン 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 を使用して、ローカルホスト上で安全な接続を確立することを参照できます。

また、フロントエンドとバックエンドの両方で同じトップレベル ドメインを使用し、サブドメインを使用することをお勧めします。

ここでもう 1 つ注意すべき点は、ドメイン名にポートがある場合、Chrome は Cookie を設定しないと思います。試してみてください。

いいねを押す +0
P粉647449444

この問題は無事に解決できたので、後で来る人が答えを見つけられるようになります。 cookieparser の宣言を、Sequelize 接続が初期化される直前に移動しました。また、withCredentials オプションを axios 投稿リクエストに追加しました。両方の手順を実行すると、Cookie が正しく設定され、アクセスできるようになりました。

リーリー リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!