2017-11-18 7 views
0

/api/v1/support/*パスに一致するPOST要求に対して、すべてのエンドポイントでCORSを有効にする必要があります。"cors"ライブラリを使用してExpressルート上でCORSを設定する方法

資格情報をtrueにして/api/v1/support/graphqlにPOSTリクエストをしていますが、プリフライトリクエスト(OPTIONSのもの)が401を返します。何が間違っているのか分かりません。

これは(私は下のこのサンプルではダミーのための実際のドメインを変更したことに注意してください)私の設定です:

const corsOptions = { 
    origin: /mydomain\.com$/, 
    credentials: true, 
    maxAge: 3600 
}; 
app.options('/api/v1/support/*', cors(corsOptions)); 
app.post('/api/v1/support/*', cors(corsOptions)); 

// graphQLRouter is an instance of express.Router() 
app.use('/api/v1/support/graphql', [ fowardIP, validateTokenInCookie ], graphQLRouter); 
+0

を助けることも

const app = express(); const corsOptions = { origin(origin, callback) { callback(null, true); }, credentials: true }; app.use(cors(corsOptions)); var allowCrossDomain = function(req, res, next) { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); res.header('Access-Control-Allow-Headers', 'Content-Type,token'); next(); } app.use(allowCrossDomain);

アクセス制御を設定する、」スペックすなわちアクセス制御 - 許可 - メソッドごとに法的request.OPTIONSです.... '、ALLOW_METHODS'、 'ALLOW_HEADERS'(access_controlヘッダー)を参照 –

+0

ブラウザでは、 'preflight'リクエストを行うブラウザに加えて、サーバーが仕様に準拠するように調整する必要があります。 CORSプリフライトOPTIONS要求で資格情報を送信しないでください。そして、あなたのアプリケーションコードのどこかに明らかに、 '/ api/v1/support/graphql'ルートには認証が必要です。これはPOST要求には問題ありません。フロントエンドコードでPOSTの一環としてクレデンシャルを送信すると、それは期待どおりに動作します。 OPTIONSリクエストではうまくいきません。認証を必要とするサーバーがなくても、資格情報を送信せずに動作する必要があります。 – sideshowbarker

答えて

0

あなたはこれを試してみてくださいすることができます。これは、サーバー上であなたに

+0

ありがとうございますが、動作しませんでした。私の設定に何が問題なのですか? –

関連する問題