web-dev-qa-db-ja.com

Expressjsで複数のCORSドメインを許可する

簡単な方法で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.headercors.Originを介してドメインの配列を取得させるにはどうすればよいですか?

12
Ajey

Cors-moduleをお勧めします: https://www.npmjs.org/package/cors この種の処理を実行します-「 動的オリジンを使用したCORSの構成)」を確認してください "-セクション

13
Johannes Reuter

このヘッダーがどのように機能するかを理解しましょう。 「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();
            });
14
AlphaLeader

実際、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();
        });
4
lugy90