1. ホーム
  2. node.js

[解決済み] Node.jsで複数ドメインのAccess-Control-Allow-Originを有効にする [duplicate]

2023-03-04 22:57:52

質問

node.jsでCORSを許可しようとしているのですが、問題点は *Access-Control-Allow-Origin もし Access-Control-Allow-Credentials が設定されている場合。

また、配列やカンマ区切りの値で Access-Control-Allow-Origin というような方法が提案されています。 Access-Control-Allow-Origin Multiple Origin Domains?

しかし、node.jsでこの方法はできないようです。

["http://example.com:9001", "http://example.com:5001"].map(domain => {
  res.setHeader("Access-Control-Allow-Origin", domain);
});
res.header("Access-Control-Allow-Credentials", true);

ここでの問題は、配列の最後の値で上書きされることです。したがって、ヘッダは res.setHeader("Access-Control-Allow-Origin", "http://example.com:5001");

クライアントブラウザからのエラー。

XMLHttpRequestを読み込むことができません。 http://example.com:9090/api/sync . この場合 'Access-Control-Allow-Origin' ヘッダには、提供されたオリジンと同じではない値 'http://example.com:5001'であり、提供されたオリジンと等しくない。 したがって、オリジン'http://example.com:9001'はアクセスを許可されていません。

どのように解決するのですか?

私の express アプリケーションで、複数のオリジンを許可するために使用しているものを以下に示します。

app.use((req, res, next) => {
  const allowedOrigins = ['http://127.0.0.1:8020', 'http://localhost:8020', 'http://127.0.0.1:9000', 'http://localhost:9000'];
  const origin = req.headers.origin;
  if (allowedOrigins.includes(origin)) {
       res.setHeader('Access-Control-Allow-Origin', origin);
  }
  //res.header('Access-Control-Allow-Origin', 'http://127.0.0.1:8020');
  res.header('Access-Control-Allow-Methods', 'GET, OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  res.header('Access-Control-Allow-Credentials', true);
  return next();
});