簡単な方法でCORSの複数のドメインをエクスプレスで許可するにはどうすればよいですか。
私が持っています
cors: {
Origin: "www.one.com";
}
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", cors.Origin);
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
これは、Origin
で言及されているドメインが1つしかない場合に機能します
しかし、ドメインの配列としてOrigin
が必要で、Origin配列内のすべてのドメインにCORSを許可したい場合は、次のようになります-
cors: {
Origin: ["www.one.com","www.two.com","www.three.com"];
}
しかし、問題は、以下のコードが機能しないことです-
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", cors.Origin);
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
res.header
にcors.Origin
を介してドメインの配列を取得させるにはどうすればよいですか?
Cors-moduleをお勧めします: https://www.npmjs.org/package/cors この種の処理を実行します-「 動的オリジンを使用したCORSの構成)」を確認してください "-セクション
このヘッダーがどのように機能するかを理解しましょう。 「Access-Control-Allow-Origin」は文字列のみを受け入れます。したがって、動的にするには、httpヘッダーから要求元のホストを取得する必要があります。承認されたドメインの配列と照合してください。存在する場合は、それを値としてヘッダーに追加します。それ以外の場合、デフォルト値を追加すると、許可されていないドメインがAPIにアクセスすることを禁止します。
このためのネイティブ実装はありません。以下のコードを使用して、自分でそれを行うことができます。
cors: {
Origin: ["www.one.com","www.two.com","www.three.com"],
default: "www.one.com"
}
app.all('*', function(req, res, next) {
var Origin = cors.Origin.indexOf(req.header('Host').toLowerCase()) > -1 ? req.headers.Origin : cors.default;
res.header("Access-Control-Allow-Origin", Origin);
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
実際、Access-Control-Allow-Originヘッダーは、許可する限り、Originヘッダーと同じ値にする必要があります。
だからあなたのコードに基づいて
cors: {
Origin: ["www.one.com","www.two.com","www.three.com"]
}
app.all('*', function(req, res, next) {
let Origin = req.headers.Origin;
if(cors.Origin.indexOf(Origin) >= 0){
res.header("Access-Control-Allow-Origin", Origin);
}
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});