Actualmente estoy aprendiendo a usar nuevas funciones de nube para Firebase y el problema que tengo es que no puedo acceder a la función que escribí a través de una solicitud de AJAX. Recibo el error "No 'Access-Control-Allow-Origin'". Aquí hay un ejemplo de la función que escribí:
exports.test = functions.https.onRequest((request, response) => { response.status(500).send({test: 'Testing functions'}); })La función se encuentra en esta URL: https://us-central1-fba-shipper-140ae.cloudfunctions.net/test
Firebase docs sugiere agregar el middleware CORS dentro de la función, lo probé pero no funciona para mí: https://firebase.google.com/docs/functions/http-events
Así es como lo hice:
var cors = require('cors'); exports.test = functions.https.onRequest((request, response) => { cors(request, response, () => { response.status(500).send({test: 'Testing functions'}); }) })¿Qué estoy haciendo mal? Agradecería cualquier ayuda con esto.
ACTUALIZAR:
La respuesta de Doug Stevenson ayudó. Agregar ({origen: verdadero}) solucionó el problema, también tuve que cambiar response.status(500) a response.status(200) que me perdí por completo al principio.
Hay dos funciones de muestra proporcionadas por el equipo de Firebase que demuestran el uso de CORS:
El segundo ejemplo usa una forma diferente de trabajar con cors de la que está usando actualmente.
Considere importar de esta manera, como se muestra en los ejemplos:
const cors = require('cors')({origin: true});Y la forma general de tu función será así:
exports.fn = functions.https.onRequest((req, res) => { cors(req, res, () => { // your function body here - use the provided req and res from cors }) });Puede configurar el CORS en la función de la nube de esta manera
response.set('Access-Control-Allow-Origin', '*');
No es necesario importar el paquete cors
Para cualquiera que intente hacer esto en Typescript, este es el código:
import * as cors from 'cors'; const corsHandler = cors({origin: true}); export const exampleFunction= functions.https.onRequest(async (request, response) => { corsHandler(request, response, () => {}); //Your code here });