2017-09-22 12 views
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を出力するプリフライト要求が、プロジェクトクォータに不必要な関数呼び出しを追加することが懸念されます。

enter image description here

質問

は、プリフライトリクエストに応じて関数呼び出しをトリガーからfirebaseを防止することが可能ですか?そうでなければ、プリフライト要求を防ぎ、関数にデータを正常に渡す方法があります。

+1

限り、あなたは 'のContent-Type追加しているとして「:」要求への応用/ json''ヘッダを、ブラウザが自動的に独自に要求をしようとする前にCORSプリフライトOPTIONS要求をするつもりされますあなたのコードから。したがって回避する唯一の方法は、アプリケーション/ jsonとしてエンコードされていない代わりに、application/x-www-form-urlencodedコンテンツタイプのリクエストボディにパラメータの値としてJSONを送信することです。つまり、 'json = [あなたのJSONデータはここ] 'のような名前+値のペアです。 https://stackoverflow.com/a/43881141/441757で*の回答のCORSプリフライト*セクションを回避する方法を参照してください。 – sideshowbarker

答えて

関連する問題