การเปิดใช้งาน CORS ใน Cloud Functions สำหรับ Firebase


141

ฉันกำลังเรียนรู้วิธีใช้ฟังก์ชันระบบคลาวด์ใหม่สำหรับ Firebase และปัญหาที่พบคือฉันไม่สามารถเข้าถึงฟังก์ชันที่ฉันเขียนผ่านคำขอ AJAX ได้ ฉันได้รับข้อผิดพลาด "No" Access-Control-Allow-Origin " นี่คือตัวอย่างของฟังก์ชันที่ฉันเขียน:

exports.test = functions.https.onRequest((request, response) => {
  response.status(500).send({test: 'Testing functions'});
})

ฟังก์ชันอยู่ใน url นี้: https://us-central1-fba-shipper-140ae.cloudfunctions.net/test

เอกสาร Firebase แนะนำให้เพิ่มมิดเดิลแวร์ CORS ภายในฟังก์ชันนี้ฉันได้ลองใช้แล้ว แต่ไม่ได้ผลสำหรับฉัน: https://firebase.google.com/docs/functions/http-events

นี่คือวิธีที่ฉันทำ:

var cors = require('cors');    

exports.test = functions.https.onRequest((request, response) => {
   cors(request, response, () => {
     response.status(500).send({test: 'Testing functions'});
   })
})

ผมทำอะไรผิดหรือเปล่า? ฉันขอขอบคุณสำหรับความช่วยเหลือใด ๆ ในเรื่องนี้

UPDATE:

คำตอบของDoug Stevensonช่วยได้ เพิ่ม ({กำเนิด: จริง}) แก้ไขปัญหาที่ฉันยังมีการเปลี่ยนแปลงresponse.status(500)ไปresponse.status(200)ซึ่งผมสมบูรณ์พลาดในตอนแรก


นอกจากนี้ยังมีตัวอย่างในเอกสารที่นี่
Kato

ฉันมีฟังก์ชั่นบางอย่างที่ใช้งานได้กับโซลูชันที่ให้มา แต่ตอนนี้กำลังลองใช้ฟังก์ชันใหม่ซึ่งโดยพื้นฐานแล้วจะเพิ่มกราฟแบบเปิดที่ด้านบนของ index.html ของฉันและส่งคืน index.html ที่อัปเดตแล้วและฉันไม่สามารถใช้งานได้ :( รับต่อไป ACCESS-CONTROL --- error
TheeBen

2
การห่อคำขอที่เข้ามาใน cors () เหมือนข้างต้นเป็นสิ่งเดียวที่เหมาะกับฉัน
Charles Harring

คุณสามารถแก้ไข "อัปเดต" ของคุณเพื่อขีดเส้นใต้ว่าต้องใช้มิดเดิลแวร์ cors ได้หรือไม่ วิธีนี้จะช่วยบางคนได้บ้าง
Antoine Weber

คำตอบ:


151

มีฟังก์ชั่นตัวอย่างสองรายการที่จัดเตรียมโดยทีม Firebase ซึ่งสาธิตการใช้ CORS:

ตัวอย่างที่สองใช้วิธีการทำงานกับ cors แตกต่างจากที่คุณใช้อยู่ในปัจจุบัน

นอกจากนี้ให้พิจารณาการนำเข้าเช่นนี้ดังที่แสดงในตัวอย่าง:

const cors = require('cors')({origin: true});

2
ขอบคุณ! การเพิ่ม ({origin: true}) ช่วย
Andrey Pokrovskiy

2
ดีที่คุณต้องการอย่างแน่นอนorigin: trueเพราะการปล่อยมันออกไปจะทำให้สิ่งนี้ใช้ไม่ได้
สก็อตต์

4
ดูเหมือนว่านี่คือที่ที่กำหนดรายการโดเมนที่อนุญาตให้เข้าถึงได้? และการตั้งค่าorigin: trueอนุญาตให้โดเมนใด ๆ เข้าถึง? ( npmjs.com/package/cors ) @Doug Stevenson คุณคิดว่า firebase สามารถเขียนเอกสารเกี่ยวกับพื้นฐานที่จำเป็นสำหรับฟังก์ชัน https ไคลเอนต์ / เซิร์ฟเวอร์ได้หรือไม่? repo ตัวอย่างนั้นดี แต่เราพลาดความต้องการพิเศษนี้ไป
Alan

9
สำหรับทุกคนที่ต้องการเพิ่มการสนับสนุน CORS ในส่วนหลัง: โปรดตรวจสอบว่าคุณเข้าใจผลที่ตามมาและวิธีกำหนดค่าอย่างถูกต้อง "ต้นกำเนิด: จริง" นั้นยอดเยี่ยมสำหรับการทดสอบ แต่มันเอาชนะจุดประสงค์ทั้งหมด :)
dSebastien

1
ฟังก์ชั่นระบบคลาวด์ของ Google ไม่อนุญาตให้กำเนิดสัญลักษณ์ตัวแทน: cloud.google.com/functions/docs/writing/…
Corey Cole

73

คุณสามารถตั้งค่า CORS ในฟังก์ชันคลาวด์ได้เช่นนี้

response.set('Access-Control-Allow-Origin', '*');

ไม่ต้องนำเข้าcorsแพ็คเกจ


2
สิ่งนี้ใช้ได้ดีกับกรณีของฉันซึ่งเป็นฟังก์ชันระบบคลาวด์ที่เรียก XHR ไปยัง Mailchimp API
elverde

1
นั่นคือคำตอบที่ต้องการ
Jimmy Kane

1
ฟังก์ชั่นระบบคลาวด์ของ Google ไม่อนุญาตให้กำเนิดสัญลักษณ์ตัวแทน: cloud.google.com/functions/docs/writing/…
Corey Cole

4
@CoreyCole ฉันคิดว่านั่นก็ต่อเมื่อคุณต้องการเพิ่มAuthorizationส่วนหัว ข้างต้นดูเหมือนจะใช้ได้
Stuart Memo

จะวางโค้ดบรรทัดนี้ไว้ที่ใด ส่วนใดของฟังก์ชันคลาวด์
Antonio Ooi

41

สำหรับใครก็ตามที่พยายามทำสิ่งนี้ใน typescript นี่คือรหัส:

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
});

3
วิธีแก้ปัญหาจะทำให้คุณสูญเสียการเข้าสู่ระบบฟังก์ชันคลาวด์ (แย่มาก) และฟังก์ชัน async / await ที่เหมาะสมคุณเสี่ยงที่เนื้อหาของฟังก์ชันจะสิ้นสุดลงก่อนเวลาอันควรภายในการโทรกลับในการโทรที่ยาวนาน
Oliver Dixon

2
ฟังก์ชั่นระบบคลาวด์ของ Google ไม่อนุญาตให้กำเนิดสัญลักษณ์ตัวแทน: cloud.google.com/functions/docs/writing/…
Corey Cole

29

ข้อมูลเพิ่มเติมอีกหนึ่งส่วนเพื่อประโยชน์ของ googling เหล่านี้หลังจากผ่านไประยะหนึ่ง: หากคุณใช้โฮสติ้ง firebase คุณยังสามารถตั้งค่าการเขียนซ้ำได้เพื่อให้ตัวอย่างเช่น url เช่น (firebase_hosting_host) / api / myfunction เปลี่ยนเส้นทางไปยัง ( firebase_cloudfunctions_host) / ฟังก์ชัน doStuff ด้วยวิธีนี้เนื่องจากการเปลี่ยนเส้นทางเป็นแบบโปร่งใสและฝั่งเซิร์ฟเวอร์คุณจึงไม่ต้องจัดการกับ cors

คุณสามารถตั้งค่าได้ด้วยส่วนการเขียนซ้ำใน firebase.json:

"rewrites": [
        { "source": "/api/myFunction", "function": "doStuff" }
]

1
imo นี่เป็นคำตอบที่ดีที่สุดเนื่องจากสามารถแก้ปัญหาจริงได้โดยไม่ต้องเพิ่มปัญหาด้านความปลอดภัยใด ๆ ด้วยวิธีนี้ฟังก์ชันคลาวด์จะได้รับจากโดเมนเดียวกันกับส่วนที่เหลือและคุณไม่จำเป็นต้องมีคอร์ใด ๆ
kolja ™

3
นี่เป็นคุณสมบัติที่ยอดเยี่ยมจริง ๆ แต่ปัจจุบันใช้งานได้ก็ต่อเมื่อฟังก์ชันนั้นอยู่ในภูมิภาคเริ่มต้น (us-central1) ฉันต้องการปรับใช้ฟังก์ชันของฉันกับ europe-west1 ด้วยเหตุผลด้านความล่าช้าและพบปัญหานี้: github.com/firebase/firebase-tools/issues/842
Alex Suzuki

การเปลี่ยนเส้นทางใช้งานได้ดีและทำให้ URL สะอาดขึ้น แต่ฉันยังไม่ทราบวิธีส่งพารามิเตอร์ GET ดูเหมือนว่าฟังก์ชัน (หลังจากเขียนซ้ำ) จะถูกเรียกโดยไม่มีพารามิเตอร์
royappa

20

ไม่มีโซลูชัน CORS ที่เหมาะกับฉัน ... จนถึงตอนนี้!

ไม่แน่ใจว่ามีใครประสบปัญหาเดียวกันกับฉันหรือไม่ แต่ฉันตั้งค่า CORS เหมือน 5 วิธีที่แตกต่างจากตัวอย่างที่ฉันพบและดูเหมือนจะไม่มีอะไรได้ผล ฉันสร้างตัวอย่างเล็ก ๆ น้อย ๆ ด้วย Plunker เพื่อดูว่ามันเป็นบั๊กจริง ๆ หรือไม่ แต่ตัวอย่างก็ทำงานได้อย่างสวยงาม ฉันตัดสินใจตรวจสอบบันทึกฟังก์ชัน firebase (พบในคอนโซล firebase) เพื่อดูว่าสามารถบอกอะไรฉันได้หรือไม่ ผมมีข้อผิดพลาดคู่ในรหัสเซิร์ฟเวอร์โหนดของฉัน , ไม่ Cors ที่เกี่ยวข้องว่าเมื่อฉันบั๊กการปล่อยตัวฉันของข้อผิดพลาดล ธ ของฉัน ฉันไม่รู้ว่าทำไมข้อผิดพลาดของรหัสที่ไม่เกี่ยวข้องกับ CORS ส่งคืนการตอบสนองข้อผิดพลาด CORS แต่มันทำให้ฉันลงรูกระต่ายที่ไม่ถูกต้องเป็นเวลาหลายชั่วโมง ...

tl; dr - ตรวจสอบบันทึกฟังก์ชัน firebase ของคุณหากไม่มีโซลูชัน CORS ทำงานและแก้ไขข้อผิดพลาดใด ๆ ที่คุณมี


1
มันทำให้ฉันแทบคลั่ง ในกรณีของฉันมันไม่มีข้อผิดพลาดแม้แต่รหัส! มัน Error: quota exceeded (Quota exceeded for quota group 'NetworkIngressNonbillable' and limit 'CLIENT_PROJECT-1d' of service 'cloudfunctions.googleapis.com เกินโควต้าฟรีโดยทั่วไปและฟังก์ชันส่งกลับข้อผิดพลาด cors
Stanislau Buzunko

เกิดขึ้นสองสามครั้งที่นี่ข้อผิดพลาดเดียวกันจะถูกส่งกลับจากเซิร์ฟเวอร์เช่นเดียวกับ cors: Error: internal เป็นข้อผิดพลาดโดยทั่วไป ข้อผิดพลาดนี้จะเกิดขึ้นหากคุณเรียกใช้ฟังก์ชันผิดตัวอย่างเช่นการพิมพ์ชื่อฟังก์ชันผิด
Henrik Bøgelund Lavstsen

เมื่อคุณพยายามขอการตรวจสอบ reCAPTCHA ของ Google ภายในฟังก์ชันคลาวด์เบราว์เซอร์จะแสดงข้อผิดพลาด CORS ให้คุณด้วย เมื่อผมตรวจสอบแฟ้มบันทึกฟังก์ชั่น Firebase access to external network resources not allowed if the billing account is not enabledคอนโซลก็กล่าวว่า หลังจากเปิดใช้งานบัญชีสำหรับการเรียกเก็บเงินแล้วบัญชีจะทำงานได้อย่างสมบูรณ์ นี่เป็นหนึ่งในตัวอย่างที่ไม่เกี่ยวข้องกับคอร์ แต่เกิดข้อผิดพลาดของคอร์
Antonio Ooi

19

ฉันมีส่วนเพิ่มเติมเล็กน้อยที่ @Andreys ตอบคำถามของเขาเอง

ดูเหมือนว่าคุณไม่จำเป็นต้องโทรกลับในcors(req, res, cb)ฟังก์ชันดังนั้นคุณสามารถเรียกใช้โมดูล cors ที่ด้านบนสุดของฟังก์ชันของคุณได้โดยไม่ต้องฝังโค้ดทั้งหมดของคุณในการโทรกลับ วิธีนี้เร็วกว่ามากหากคุณต้องการใช้ cors ในภายหลัง

exports.exampleFunction = functions.https.onRequest((request, response) => {
    cors(request, response, () => {});
    return response.send("Hello from Firebase!");
});

อย่าลืมเริ่มต้น cors ตามที่ระบุไว้ในโพสต์เปิด:

const cors = require('cors')({origin: true});


1
สิ่งนี้ใช้ได้ผลเมื่อ SO อื่น ๆ ตอบพร้อมกับการตั้งค่าส่วนหัวด้วยตนเองไม่ได้
Jim Factor

วิธีนี้ใช้งานได้ แต่อาจทำให้เกิดข้อผิดพลาด TSlint หากคุณเปิดใช้งานและคุณไม่สามารถปรับใช้กับ firebase ได้ ใส่การตอบสนองภายในการปิด cors เพื่อเอาชนะมันcors(request, response, () => { return response.send("Hello from Firebase!"); });
Spiral Out

1
2 ข้อผิดพลาดที่นี่พวก คนแรก. สิ่งใดก็ตามหลังจากฟังก์ชัน cors จะทำงานสองครั้ง (เนื่องจากคำขอแรกเป็นแบบ preflight) ไม่ดี. ประการที่สอง @SpiralOut โซลูชันของคุณจะทำให้คุณสูญเสียการเข้าสู่ระบบฟังก์ชันคลาวด์ (แย่มาก) และฟังก์ชัน async / await ที่เหมาะสมคุณเสี่ยงที่เนื้อหาของฟังก์ชันจะสิ้นสุดลงก่อนเวลาอันควรภายในการติดต่อกลับ
Oliver Dixon

@SpiralOut คุณสามารถปิดการใช้งาน tslint
Vlad

1
หลังจากได้เรียนรู้เกี่ยวกับ gcf มากมายในปีที่แล้วฉันจะไม่แนะนำคำตอบนี้อีกต่อไป อาจเป็นประโยชน์สำหรับการสร้างต้นแบบที่รวดเร็ว แต่หลีกเลี่ยงสิ่งนี้ในกรณีการผลิตจริง
Jaap Weijland

11

สิ่งนี้อาจเป็นประโยชน์ ฉันสร้างฟังก์ชันคลาวด์ firebase HTTP ด้วย Express (URL ที่กำหนดเอง)

const express = require('express');
const bodyParser = require('body-parser');
const cors = require("cors");
const app = express();
const main = express();

app.post('/endpoint', (req, res) => {
    // code here
})

app.use(cors({ origin: true }));
main.use(cors({ origin: true }));
main.use('/api/v1', app);
main.use(bodyParser.json());
main.use(bodyParser.urlencoded({ extended: false }));

module.exports.functionName = functions.https.onRequest(main);

โปรดตรวจสอบว่าคุณได้เพิ่มส่วนการเขียนซ้ำแล้ว

"rewrites": [
      {
        "source": "/api/v1/**",
        "function": "functionName"
      }
]

1
คำตอบของคุณต่ำเกินไปเพื่อนของฉันเป็นคำตอบที่ดีที่สุด
Avram Virgil

ขอบคุณ @AvramVirgil
Sandy

นี่เป็นวิธีที่รวดเร็วและง่ายที่สุดขอบคุณ!
Gaurav Kakkar

8

ฉันเพิ่งเผยแพร่ชิ้นส่วนเล็ก ๆ เกี่ยวกับเรื่องนี้:

https://mhaligowski.github.io/blog/2017/03/10/cors-in-cloud-functions.html

โดยทั่วไปคุณควรใช้แพ็คเกจ Express CORSซึ่งต้องใช้การแฮ็กเล็กน้อยเพื่อให้เป็นไปตามข้อกำหนดในฟังก์ชัน GCF / Firebase

หวังว่าจะช่วยได้!


4
ไม่แน่ใจว่าคุณหมายถึงอะไรโดยการแฮ็ก? สนใจที่จะอธิบายสักหน่อย? อ่านโพสต์ของคุณ แต่ไม่เห็นคุณพูดถึง
TheeBen

1
ผู้เขียนโมดูล cors ที่นี่ โดย "แฮ็ก" mhaligowski หมายความว่าเขาต้องตัดการโทรไปยังโมดูล cors เพื่อให้ตรงกับวิธีที่ Express เรียกมิดเดิลแวร์ (เช่นจัดหาฟังก์ชันเป็นพารามิเตอร์ที่สามหลังจาก req & res)
Troy

4

หากมีคนอย่างฉันอยู่ที่นั่น: หากคุณต้องการเรียกใช้ฟังก์ชันคลาวด์จากโปรเจ็กต์เดียวกับฟังก์ชันคลาวด์ด้วยตัวเองคุณสามารถเริ่มต้น firebase sdk และใช้เมธอด onCall จะจัดการทุกอย่างให้คุณ:

exports.newRequest = functions.https.onCall((data, context) => {
    console.log(`This is the received data: ${data}.`);
    return data;
})

เรียกฟังก์ชันนี้ว่า:

// Init the firebase SDK first    
const functions = firebase.functions();
const addMessage = functions.httpsCallable(`newRequest`);

เอกสาร Firebase: https://firebase.google.com/docs/functions/callable

หากคุณไม่สามารถเริ่มต้น SDK นี่คือสาระสำคัญจากคำแนะนำอื่น ๆ :


3
จริงๆแล้วเมื่อฉันใช้ onCall func บนเบราว์เซอร์ฉันได้รับข้อผิดพลาด cors ฉันสามารถตั้งค่าส่วนหัว costom ในคำขอนี้ได้หรือไม่
Viktor Hardubej

4

พบวิธีเปิดใช้งาน cors โดยไม่ต้องนำเข้าไลบรารี 'cors' ใด ๆ นอกจากนี้ยังใช้งานได้Typescriptและทดสอบใน Chrome เวอร์ชัน 81.0

exports.createOrder = functions.https.onRequest((req, res) => {
// browsers like chrome need these headers to be present in response if the api is called from other than its base domain
  res.set("Access-Control-Allow-Origin", "*"); // you can also whitelist a specific domain like "http://127.0.0.1:4000"
  res.set("Access-Control-Allow-Headers", "Content-Type");

  // your code starts here

  //send response
  res.status(200).send();
});

3

สำหรับสิ่งที่คุ้มค่าผมมีปัญหาเดียวกันเมื่อผ่านเข้าไปในapp onRequestฉันตระหนักว่าปัญหาคือเครื่องหมายทับบน URL คำขอสำหรับฟังก์ชัน firebase เอ็กซ์เพรสกำลังมองหาแต่ฉันไม่ได้มีเฉือนท้ายในฟังก์ชั่น'/' [project-id].cloudfunctions.net/[function-name]ข้อผิดพลาด CORS เป็นค่าลบเท็จ เมื่อฉันเพิ่มเครื่องหมายทับฉันได้รับการตอบสนองที่ฉันคาดหวัง


ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มของคุณ[project-id]เนื่องจากนี่เป็นปัญหาที่ฉันประสบ
ถอดปลั๊ก

3

วิธีนี้เท่านั้นที่ใช้ได้ผลสำหรับฉันเนื่องจากฉันได้รับอนุญาตในคำขอของฉัน:

exports.hello = functions.https.onRequest((request, response) => {
response.set('Access-Control-Allow-Origin', '*');
response.set('Access-Control-Allow-Credentials', 'true'); // vital
if (request.method === 'OPTIONS') {
    // Send response to OPTIONS requests
    response.set('Access-Control-Allow-Methods', 'GET');
    response.set('Access-Control-Allow-Headers', 'Content-Type');
    response.set('Access-Control-Max-Age', '3600');
    response.status(204).send('');
} else {
    const params = request.body;
    const html = 'some html';
    response.send(html)
} )};

ฟังก์ชั่นระบบคลาวด์ของ Google ไม่อนุญาตให้กำเนิดสัญลักษณ์ตัวแทน: cloud.google.com/functions/docs/writing/…
Corey Cole

3

หากคุณไม่ / ไม่สามารถใช้ปลั๊กอิน cors ได้การเรียกใช้setCorsHeaders()ฟังก์ชันสิ่งแรกในฟังก์ชันตัวจัดการก็จะใช้ได้เช่นกัน

ใช้ฟังก์ชัน responseSuccess / Error เมื่อตอบกลับ

const ALLOWED_ORIGINS = ["http://localhost:9090", "https://sub.example.com", "https://example.com"]


// Set CORS headers for preflight requests
function setCorsHeaders (req, res) {
  var originUrl = "http://localhost:9090"


  if(ALLOWED_ORIGINS.includes(req.headers.origin)){
    originUrl = req.headers.origin
  }

  res.set('Access-Control-Allow-Origin', originUrl);
  res.set('Access-Control-Allow-Credentials', 'true');

  if (req.method === 'OPTIONS') {
    // Send response to OPTIONS requests
    res.set('Access-Control-Allow-Methods', 'GET,POST','PUT','DELETE');
    res.set('Access-Control-Allow-Headers', 'Bearer, Content-Type');
    res.set('Access-Control-Max-Age', '3600');
    res.status(204).send('');
  }
}

function respondError (message, error, code, res) {
  var response = {
    message: message,
    error: error
  }
  res.status(code).end(JSON.stringify(response));
}


function respondSuccess (result, res) {
  var response = {
    message: "OK",
    result: result
  }
  res.status(200).end(JSON.stringify(response));
}

2

หากคุณกำลังทดสอบแอป firebase ในเครื่องคุณต้องชี้ฟังก์ชันไปที่localhostแทนที่จะเป็นระบบคลาวด์ ตามค่าเริ่มต้นfirebase serveหรือfirebase emulators:startชี้ฟังก์ชันไปที่เซิร์ฟเวอร์แทนที่จะเป็น localhost เมื่อคุณใช้งานบนเว็บแอปของคุณ

เพิ่มสคริปต์ด้านล่างในส่วนหัว html หลังสคริปต์เริ่มต้นของ firebase:

 <script>
      firebase.functions().useFunctionsEmulator('http://localhost:5001')
 </script> 

อย่าลืมลบข้อมูลโค้ดนี้ออกเมื่อปรับใช้โค้ดกับเซิร์ฟเวอร์


2

การเปลี่ยนแปลงtrueโดย"*"ไม่เคล็ดลับสำหรับฉันดังนั้นนี้เป็นวิธีที่ดูเหมือนว่า:

const cors = require('cors')({ origin: "*" })

ฉันลองใช้วิธีนี้เพราะโดยทั่วไปนี่คือวิธีตั้งค่าส่วนหัวการตอบกลับนี้:

'Access-Control-Allow-Origin', '*'

โปรดทราบว่าการดำเนินการนี้จะทำให้โดเมนใด ๆ เรียกใช้ปลายทางของคุณได้ดังนั้นจึงไม่ปลอดภัย

นอกจากนี้คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเอกสาร: https://github.com/expressjs/cors


1

หากคุณไม่ได้ใช้ Express หรือเพียงแค่ต้องการใช้ CORS รหัสต่อไปนี้จะช่วยแก้ไข

const cors = require('cors')({ origin: true, });   
exports.yourfunction = functions.https.onRequest((request, response) => {  
   return cors(request, response, () => {  
        // *Your code*
    });
});

0

ในกรณีของฉันข้อผิดพลาดเกิดจากการเข้าถึงขีด จำกัด ผู้เรียกใช้ฟังก์ชันคลาวด์ โปรดเพิ่ม allUsers ในผู้เรียกใช้ฟังก์ชันคลาวด์ โปรดจับการเชื่อมโยง โปรดดูบทความสำหรับข้อมูลเพิ่มเติม


โปรดระบุคำอธิบายของเนื้อหาที่เชื่อมโยงในคำตอบของคุณว่าเหตุใดจึงมีความเกี่ยวข้อง
หิ่งห้อย

0

หากวิธีแก้ปัญหาอื่น ๆ ไม่ได้ผลคุณสามารถลองเพิ่มที่อยู่ด้านล่างที่จุดเริ่มต้นของการโทรเพื่อเปิดใช้งาน CORS - เปลี่ยนเส้นทาง:

https://cors-anywhere.herokuapp.com/

โค้ดตัวอย่างพร้อมคำขอ JQuery AJAX:

$.ajax({
   url: 'https://cors-anywhere.herokuapp.com/https://fir-agilan.web.app/gmail?mail=asd@gmail.com,
   type: 'GET'
});

0

เพิ่มประสบการณ์ของฉัน ฉันใช้เวลาหลายชั่วโมงในการพยายามค้นหาสาเหตุที่ฉันมีข้อผิดพลาด CORS

เกิดขึ้นเมื่อฉันเปลี่ยนชื่อฟังก์ชันคลาวด์ของฉัน (ครั้งแรกที่ฉันพยายามหลังจากอัปเกรดครั้งใหญ่)

ดังนั้นเมื่อแอป firebase ของฉันเรียกใช้ฟังก์ชันคลาวด์ด้วยชื่อที่ไม่ถูกต้องมันควรมีข้อผิดพลาด 404 ไม่ใช่ข้อผิดพลาด CORS

การแก้ไขชื่อฟังก์ชันระบบคลาวด์ในแอป firebase ของฉันช่วยแก้ปัญหาได้

ฉันได้กรอกรายงานข้อบกพร่องที่นี่แล้ว https://firebase.google.com/support/troubleshooter/report/bugs

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.