3
クライアント上のフォーム送信からの入力を検証するクラウド機能があります。 Firehouse https triggersのクラウド機能をcors express middlewareで使用しています。私は2を参照してくださいフェッチ要求を使用して、私のクライアントからこの関数を呼び出すとCORSプリフライトリクエストでのFirebaseトリガ機能のクラウド機能
const validateImageFormFetchOptions = {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
method: 'POST',
body: JSON.stringify({
formInputs: formInputs
})
}
fetch('https://project-url.cloudfunctions.net/apiValidateImageForm', validateImageFormFetchOptions)
.then(response => response.json())
.then(serverErrors => {console.log(serverErrors)});
問題
を関数に
Firebase機能
const functions = require('firebase-functions');
const express = require('express');
const cors = require('cors')({origin: true});
const validateImageForm = require('./library/validate-image-form');
exports.apiValidateImageForm = functions.https.onRequest((req, res) => {
cors(req, res,() => {
validateImageForm(req.body.formInputs, req.body.imageStatus).then((data) => {
res.status(200).send(data);
});
});
});
クライアントコールapiValidateImageFormトリガー機能ログのers。最初はステータス204で、これは原点をチェックするcorsプリフライトリクエストから来たものと想定しています。最終的な要求はステータス200です。私はapiValidateImageForm関数をフェッチするときに1つの関数のトリガーが必要です。時間がたつにつれてステータス204を出力するプリフライト要求が、プロジェクトクォータに不必要な関数呼び出しを追加することが懸念されます。
質問
は、プリフライトリクエストに応じて関数呼び出しをトリガーからfirebaseを防止することが可能ですか?そうでなければ、プリフライト要求を防ぎ、関数にデータを正常に渡す方法があります。
限り、あなたは 'のContent-Type追加しているとして「:」要求への応用/ json''ヘッダを、ブラウザが自動的に独自に要求をしようとする前にCORSプリフライトOPTIONS要求をするつもりされますあなたのコードから。したがって回避する唯一の方法は、アプリケーション/ jsonとしてエンコードされていない代わりに、application/x-www-form-urlencodedコンテンツタイプのリクエストボディにパラメータの値としてJSONを送信することです。つまり、 'json = [あなたのJSONデータはここ] 'のような名前+値のペアです。 https://stackoverflow.com/a/43881141/441757で*の回答のCORSプリフライト*セクションを回避する方法を参照してください。 – sideshowbarker