2016-04-04 8 views
0

は、私は公式のCORSモジュールの例からホワイトリストエクスプレスCORSドメインのホワイトリスト

以外のすべてのドメインを制限する必要がhttps://www.npmjs.com/package/cors 要求:私はこれに変更されている

var whitelist = ['http://example1.com', 'http://example2.com']; 
var corsOptions = { 
    origin: function(origin, callback){ 
    var originIsWhitelisted = whitelist.indexOf(origin) !== -1; 
    callback(null, originIsWhitelisted); 
    } 
}; 

app.get('/products/:id', cors(corsOptions), function(req, res, next){ 
    res.json({msg: 'This is CORS-enabled for a whitelisted domain.'}); 
}); 

それを動作させる:

var origin; 
var corsOptions; 
app.all('*', function (req, res, next) { 
    origin = req.get('origin'); 
    var whitelist = ['http://example1.com', 'http://example2.com']; 
    corsOptions = { 
     origin: function (origin, callback) { 
      var originIsWhitelisted = whitelist.indexOf(origin) !== -1; 
      callback(null, originIsWhitelisted); 
     } 
    }; 
    next(); 
}); 
app.post('/products/:id', cors(corsOptions), function (req, res, next) { 
    res.json({ msg: 'This is CORS-enabled for a whitelisted domain.' }); 
}); 

その後、私は私がexpecte app.post('/products/:id'...)に掲載することにより、http://localhost:8080からテストを実行しますhttp://localhost:8080はホワイトリストに登録されていませんが実際には実行されているため実行されるべきではありません。どのようなアイデアをなぜ、どのように修正するか?

はまた、私は見て cors(corsOptions)をdidaddが、それは言っている - not available

+0

なぜ 'cors'モジュールのreadmeの元の例はあなたのためには機能しませんか?あなたのコードは、要求が受信されるまでそれを延期することを除いて、実際には同じ正確なことをしています。 – mscdex

+0

@mscdex私はもう少しデバッグを行い、実際にはオリジナルのものが動作しています。しかし、私はちょっと混乱しています。 'res.json({msg: 'これはホワイトリストに登録されたドメインに対してCORS対応です。'))'実行されていますが、 -Origin 'ヘッダーが要求されたリソースに存在します。 Origin ' – sreginogemoh

答えて

1

理由はcors(corsOptions)が呼び出されたときcorsOptionsはまだundefinedである(事実上同じcors()として)cors(corsOptions)以降は、起動時にすぐに評価されていることです。

+0

Ho' express'は 'res.json({msg: 'これはホワイトリストに登録されたドメインに対してCORS対応です。'})ではなく、' No 'Access-Control-Allow-Origin''エラーを返さなければならないことを理解しています。 ; '? 'ホワイトリストドメイン 'からの要求を送信するときに' 'res.json({msg:'これはホワイトリストに登録されたドメインに対してCORS対応です。 ')という行が表示されているのは、' cors(corsOptions) '関与する? – sreginogemoh

+1

'cors(corsOptions)'はミドルウェア関数を返します。この関数は '/ products /:id'へのPOST要求ごとに呼び出されますが、実際のルートハンドラが呼び出される前に呼び出されます。これにより 'cors'ミドルウェアはルートハンドラに到達する前にリクエストを拒否することができます。ミドルウェアを 'app.post()'やミドルウェア/ルートハンドラを受け入れる他の関数に多く渡すことができ、順番に処理します。 – mscdex

+0

私はまだ混乱していますが、応答は縫い目は正しいですが、ルートコードは常に実行されますが、これは適切ではありません。なぜなら、 '非ホワイトリスト化された 'ドメインの場合にはルートコードを実行する必要がないからです。別の質問をここに入れてください。http://stackoverflow.com/questions/36393965/node-express-cors-and-routes – sreginogemoh

関連する問題