ফায়ারবেসের জন্য ক্লাউড ফাংশনে সিওআরএস সক্ষম করা


141

আমি বর্তমানে ফায়ারবাসের জন্য কীভাবে নতুন ক্লাউড ফাংশনগুলি ব্যবহার করতে পারি এবং আমার যে সমস্যাটি হচ্ছে তা হ'ল আমি এজেএক্স অনুরোধের মাধ্যমে আমার লেখা ফাংশনটি অ্যাক্সেস করতে পারি না। আমি "না 'অ্যাক্সেস-কন্ট্রোল-অরিজিন-অরিজিন'" ত্রুটি পেয়েছি। আমি লিখেছি ফাংশন একটি উদাহরণ এখানে:

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

ফাংশনটি এই url- এ বসে আছে: https://us-central1-fba-shipper-140ae.cloudfunitions.net/test

ফায়ারবেস ডকসটি ফাংশনের ভিতরে সিওআরএস মিডলওয়্যার যুক্ত করার পরামর্শ দেয়, আমি চেষ্টা করেছি কিন্তু এটি আমার পক্ষে কাজ করছে না: https://firebase.google.com/docs/funitions/http-events

এটি আমি এটি করেছিলাম:

var cors = require('cors');    

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

আমি কি ভুল করছি? আমি এই সাথে কোন সাহায্যের প্রশংসা করব।

হালনাগাদ:

ডগ স্টিভেনসন উত্তর সাহায্য করেছে। যুক্তকরণ ({উত্স: সত্য}) সমস্যাটি স্থির করেছে, আমাকেও পরিবর্তন response.status(500)করতে হয়েছিল response.status(200)যা আমি প্রথমে পুরোপুরি মিস করেছি।


এছাড়াও এখানে
কাতো

আমার দেওয়া কয়েকটি সমাধান রয়েছে যা সরবরাহ করা সমাধানের সাথে কাজ করে তবে এখন একটি নতুন ফাংশন চেষ্টা করছি যা মূলত আমার সূচক html এর শীর্ষে খোলার গ্রাফ যুক্ত করে এবং আপডেট সূচকটি প্রদান করে এবং আমি এটি কাজ করতে পারি না :( পেতে থাকুন অ্যাকসেস-নিয়ন্ত্রণ --- ত্রুটি
থিবেন

2
উপরের মত করস () হিসাবে আগত অনুরোধটি মোড়ানো কেবলমাত্র আমার জন্য কাজ করেছিল
চার্লস হ্যারিং

কর্স মিডলওয়্যারের প্রয়োজনীয়তাটি নিম্নরেখার জন্য আপনি কি আপনার "আপডেট" সম্পাদনা করতে পারেন? এটি কিছু লোককে কিছুটা সময় সাশ্রয় করবে
এন্টোইন ওয়েবার

উত্তর:


151

ফায়ারবেস টিম দুটি প্রদত্ত নমুনা ফাংশন রয়েছে যা সিওআরএসের ব্যবহার প্রদর্শন করে:

দ্বিতীয় নমুনাটি বর্তমানে আপনি ব্যবহার করছেন তার চেয়ে করের সাথে কাজ করার একটি পৃথক পদ্ধতি ব্যবহার করে।

এছাড়াও, নমুনাগুলিতে প্রদর্শিত হিসাবে, এই জাতীয় আমদানি বিবেচনা করুন:

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

2
ধন্যবাদ! যোগ করা ({উত্স: সত্য}) সহায়তা করেছে।
আন্দ্রে পোক্রোভস্কি

2
ভালো origin: trueলাগল , আপনার অবশ্যই এটি দরকার আছে কারণ এটি ছেড়ে দেওয়ার ফলে এটি কাজ করবে না
স্কট

4
দেখে মনে হচ্ছে এটি যেখানে ডোমেনের শ্বেত তালিকাটি অ্যাক্সেসের অনুমতি দেয় তা সংজ্ঞায়িত করা হয়? এবং সেটিং origin: trueকোনও ডোমেন অ্যাক্সেস করতে দেয়? ( npmjs.com/package/cors ) @ ডউগ স্টিভেনসন আপনার কি মনে হয় ফায়ারবেস ক্লায়েন্ট / সার্ভারের https ফাংশনগুলির জন্য প্রয়োজনীয় বুনিয়াদিগুলিতে একটি ডক লিখতে পারে? নমুনাগুলি রেপো ভাল, তবে আমরা অতিরিক্ত অতিরিক্ত এই প্রয়োজনটি মিস করেছি।
অ্যালান

9
যে কেউ তাদের ব্যাক-এন্ডে সিওআরএস সমর্থন যুক্ত করতে ইচ্ছুক: দয়া করে নিশ্চিত করুন যে আপনি পরিণতি এবং কীভাবে এটি সঠিকভাবে কনফিগার করবেন তা বুঝতে পেরেছেন to "উত্স: সত্য" পরীক্ষার জন্য দুর্দান্ত তবে এটি পুরো উদ্দেশ্যকে পরাস্ত করে :)
ডি সেবাস্তিয়ান

1
গুগল ক্লাউড ফাংশনগুলি ওয়াইল্ডকার্ড উত্সের অনুমতি দেয় না: ক্লাউড.google.com/function/docs/writing/…
কোরি কোল

73

আপনি এইভাবে ক্লাউড ফাংশনে সিওআরএস সেট করতে পারেন

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

corsপ্যাকেজ আমদানি করার দরকার নেই


2
এটি আমার ক্ষেত্রে পুরোপুরি কাজ করে, মেঘ ফাংশন যা মেলচিম্প এপিআইতে এক্সএইচআর কল করে makes
elverde

1
এটাই দরকার উত্তর।
জিমি কেন

1
গুগল ক্লাউড ফাংশনগুলি ওয়াইল্ডকার্ড উত্সের অনুমতি দেয় না: ক্লাউড.google.com/function/docs/writing/…
কোরি কোল

4
@ কোরিকোল আমি মনে করি এটি কেবলমাত্র যদি আপনার Authorizationশিরোনাম যুক্ত করতে হয় । উপরেরটি ঠিক আছে বলে মনে হচ্ছে।
স্টুয়ার্ট মেমো

এই লাইন কোডটি কোথায় রাখবেন? মেঘের কোন অংশের কাজ?
আন্তোনিও ওয়

41

যে কেউ টাইপস্ক্রিপ্টে এটি করার চেষ্টা করছে তাদের জন্য এই কোড:

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 / কার্যকারিতার জন্য অপেক্ষা করবে, আপনি দীর্ঘ কলগুলিতে কলব্যাকের মধ্যে ফাংশন সামগ্রীটি অকালে শেষ হওয়া ঝুঁকিপূর্ণ করবে।
অলিভার ডিকসন

2
গুগল ক্লাউড ফাংশনগুলি ওয়াইল্ডকার্ড উত্সের অনুমতি দেয় না: ক্লাউড.google.com/function/docs/writing/…
কোরি কোল

29

কিছু সময়ের পরে এই গুগল করা ব্যক্তিদের জন্য তথ্যের একটি অতিরিক্ত অংশ: আপনি যদি ফায়ারবেস হোস্টিং ব্যবহার করে থাকেন তবে আপনি পুনর্লিখনগুলিও সেট আপ করতে পারেন, যাতে উদাহরণস্বরূপ (ফায়ারব্যাস_হোস্টিং_হোস্ট) / এপিআই / মাইফ্যাঙ্কশনের মতো একটি ইউআরএল পুনঃনির্দেশ করে ( ফায়ারবেস_ক্লাউডফুনেশনস_হোস্ট) / ডু স্টফ ফাংশন। এইভাবে, যেহেতু পুনঃনির্দেশটি স্বচ্ছ এবং সার্ভার-সাইড, তাই আপনাকে কর্সের সাথে ডিল করতে হবে না।

আপনি এটি ফায়ারবেস.জেসনে পুনর্লিখন বিভাগের সাথে সেট করতে পারেন:

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

1
তবে, এটি সর্বোত্তম উত্তর, যেহেতু এটি কোনও অতিরিক্ত সুরক্ষা সমস্যা না যুক্ত করে আসল সমস্যাটি সমাধান করে। এইভাবে ক্লাউড ফাংশনগুলি বাকী হিসাবে একই ডোমেন থেকে পরিবেশন করা হয় এবং আপনার এমনকি কোনও করেরও প্রয়োজন নেই।
কলজাটিএম

3
এটি প্রকৃতপক্ষে একটি দুর্দান্ত বৈশিষ্ট্য, তবে এটি কেবলমাত্র তখনই কাজ করে যদি ফাংশনগুলি ডিফল্ট অঞ্চলে (ইউএস-সেন্ট্রাল 1) থাকে। আমি বিলম্বিত কারণে আমার ফাংশনগুলি ইউরোপ-ওয়েস্ট 1-এ স্থাপন করতে চেয়েছি এবং এই ইস্যুটিতে ছড়িয়ে পড়েছি
অ্যালেক্স সুজুকি

পুনর্নির্দেশটি সূক্ষ্মভাবে কাজ করে এবং ইউআরএলকে আরও পরিষ্কার করে তোলে তবে কীভাবে জিইটি প্যারামিটারগুলি পাস করতে পারি তা আমি খুঁজে পাইনি। ফাংশন (পুনর্লিখনের পরে) পরামিতি ছাড়াই ডেকেছে বলে মনে হচ্ছে।
রোয়াপ্পা

20

আমার জন্য কোনও সিওআরএস সমাধান কাজ করেনি ... এখন অবধি!

আমি নিশ্চিত যে অন্য কেউ একই সমস্যায় পড়েছে কিনা তা নিশ্চিত নই, তবে আমি যে উদাহরণগুলি পেয়েছি তার থেকে 5 টি পৃথক উপায়ে সিওআরএস স্থাপন করেছি এবং কিছুই মনে হয় কাজ করছে না। সত্যিই এটি কোনও বাগ ছিল কিনা তা দেখার জন্য আমি প্লুঙ্কারের সাথে একটি ন্যূনতম উদাহরণ স্থাপন করেছি, তবে উদাহরণটি সুন্দরভাবে চলে। আমি ফায়ারবেস ফাংশন লগগুলি (ফায়ারবেস কনসোলে পাওয়া গেছে) তা পরীক্ষা করে দেখার সিদ্ধান্ত নিয়েছি যে এটি আমাকে কিছু বলতে পারে কিনা to আমার নোড সার্ভার কোডে দু'টি ত্রুটি ছিল , সম্পর্কিত কর সম্পর্কিত নয় , আমি ডিবাগ করলে আমার কর্স ত্রুটি বার্তাটি প্রকাশ করে । আমি জানি না কেন কোড ত্রুটিগুলি সিওআরএসের সাথে সম্পর্কিত নয় কেন একটি কর্স ত্রুটি প্রতিক্রিয়া দেখায়, তবে এটি আমাকে বেশ কয়েক ঘন্টা ধরে ভুল খরগোশের ছিদ্রটি নামিয়ে নিয়ে যায় ...

tl; dr - কোনও সিআরএস সমাধান কাজ না করে এবং আপনার যে কোনও ত্রুটি ডিবাগ করে যদি আপনার ফায়ারবেস ফাংশন লগগুলি পরীক্ষা করে দেখুন


1
এটি আমাকে পাগল করে তুলেছে আমার ক্ষেত্রে এটি কোডেও ত্রুটি ছিল না! এটি Error: quota exceeded (Quota exceeded for quota group 'NetworkIngressNonbillable' and limit 'CLIENT_PROJECT-1d' of service 'cloudfunctions.googleapis.com এতটা মূলত বিনামূল্যে কোটা ছাড়িয়ে গিয়েছিল এবং ফাংশনগুলি কর ত্রুটি ফিরিয়ে দিয়েছে
স্ট্যানিশালু বুজুনকো

এখানে বেশ কয়েকবার ঘটেছিল, একই ত্রুটিটি সার্ভারের পাশাপাশি কর হিসাবেও ফিরে আসে: ত্রুটি: অভ্যন্তরীণ মূলত ত্রুটি। আপনি যদি ভুল ফাংশনটি চালনা করেন তবে এই ত্রুটিটিও ঘটবে, উদাহরণস্বরূপ কোনও ফাংশনটির নাম ভুল করে
লিখেছেন

আপনি যখন ক্লাউড ফাংশনের মধ্যে গুগল রেক্যাপচা যাচাইকরণের জন্য অনুরোধ করার চেষ্টা করেন, ব্রাউজারটি আপনাকে সিওআরএস ত্রুটিও ছুঁড়ে দেয়। আমি যখন ফায়ারবেস কনসোল ফাংশন লগ পরীক্ষা করি, এটি বলে access to external network resources not allowed if the billing account is not enabled। বিলিং অ্যাকাউন্ট সক্ষম করার পরে, এটি পুরোপুরি কার্যকর হয়। এটি অ-কর সম্পর্কিত সম্পর্কিত উদাহরণগুলির মধ্যে একটি তবে কর্স ত্রুটি নিক্ষেপ করা হয়।
আন্তোনিও ওয়

19

আমার নিজের প্রশ্নের উত্তর @ অ্যান্ড্রেস এর সাথে কিছুটা যোগ আছে।

মনে হচ্ছে cors(req, res, cb)ফাংশনে আপনাকে কলব্যাক কল করতে হবে না , তাই আপনি কলব্যাকটিতে আপনার সমস্ত কোড এম্বেড না করে কেবল আপনার ফাংশনের শীর্ষে কর্স মডিউলটি কল করতে পারেন। আপনি যদি পরে কর প্রয়োগ করতে চান তবে এটি আরও দ্রুত much

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

উদ্বোধনী পোস্টে উল্লিখিত কর হিসাবে কর্ন করতে ভুলবেন না:

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


1
অন্যান্য এসও জবাব দেয় যখন শিরোনামগুলি ম্যানুয়ালি সেট করার সাথে উত্তর দেয়
জিম ফ্যাক্টর

এটি কাজ করে তবে এটি টিস্লিন্ট ত্রুটির কারণ হতে পারে যদি আপনি এটি সক্ষম করে থাকেন এবং আপনি ফায়ারব্যাসে স্থাপন করতে না পারেন। এটিকে কাটিয়ে উঠতে করস ক্লোজের অভ্যন্তরে প্রতিক্রিয়াটি রাখুনcors(request, response, () => { return response.send("Hello from Firebase!"); });
স্প্রিয়াল আউট

1
এখানে 2 ত্রুটি। প্রথমটি. কর্স ফাংশনের পরে যে কোনও কিছুই দ্বিগুণ চলবে (যেহেতু প্রথম অনুরোধটি প্রাকফলাইট)। ভাল না. দ্বিতীয়ত, @ স্পিরালআউট আপনার সমাধানটি আপনাকে মেঘের ফাংশনগুলিতে (খুব খারাপ) লগিং হারাতে এবং যথাযথ অ্যাসিঙ্ক / কার্যকারিতার জন্য অপেক্ষা করবে, আপনি কলব্যাকের ভিতরে ফাংশন সামগ্রীটি অকালে শেষ হওয়া ঝুঁকিপূর্ণ করবেন।
অলিভার ডিকসন

@ স্পিরালআউট তবে আপনি কেবল স্লিন্ট অক্ষম করতে পারবেন
ভ্লাদ

1
গত বছর জিসিএফ সম্পর্কে অনেক কিছু শিখার পরে, আমি এই উত্তরটি আর সুপারিশ করব না। এটি দ্রুত প্রোটোটাইপগুলির পক্ষে কার্যকর হতে পারে তবে বাস্তব উত্পাদনের ক্ষেত্রে এটি এড়াতে পারেন
জাপ ওয়েজল্যান্ড

11

এটি সহায়ক হতে পারে। আমি এক্সপ্রেস (কাস্টম 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
আপনার উত্তরটি খুব কম আমার বন্ধু, এখন পর্যন্ত সর্বোত্তম উত্তর।
অভ্রম ভার্জিল

ধন্যবাদ। @ অভ্রামভিগিল
স্যান্ডি

এটি সবার মধ্যে দ্রুত এবং সহজতম ছিল, ধন্যবাদ!
গৌরব কাক্কর

8

আমি এটির উপর একটি সামান্য টুকরো প্রকাশ করেছি:

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

সাধারণত, আপনার এক্সপ্রেস সিওআরএস প্যাকেজটি ব্যবহার করা উচিত , যার জন্য জিসিএফ / ফায়ারবেস ফাংশনগুলির প্রয়োজনীয়তাগুলি পূরণ করার জন্য কিছুটা হ্যাকিং প্রয়োজন।

আশা করি এইটি কাজ করবে!


4
হ্যাকিং দ্বারা আপনি কী বোঝেন তা নিশ্চিত নন? একটু বিস্তৃত করার যত্ন? আপনার পোস্টটি পড়ুন তবে আমি আপনাকে এটি উল্লেখ করতে দেখছি না
থিবেন

1
এখানে কর্স মডিউল লেখক; "হ্যাকিং" দ্বারা মহালিগোস্কি কেবল সহজভাবে বোঝায় যে এক্সপ্রেস মিডলওয়্যারের সাথে যেভাবে কল হয় তার সাথে এটি মেলানোর জন্য কর্স মডিউলটিতে কলটি আবদ্ধ করতে হয়েছিল (অর্থাত রেকর্ড ও রেজির পরে তৃতীয় প্যারামিটার হিসাবে কোনও ফাংশন সরবরাহ করা)
ট্রয়

4

যদি আমার মতো লোকেরা সেখানে থাকে: আপনি যদি মেঘটিকে নিজের মতো করে একই প্রকল্প থেকে ক্লাউড ফাংশনটি কল করতে চান তবে আপনি ফায়ারবেস এসডিকে শুরু করতে পারেন এবং অনক্যাল পদ্ধতিটি ব্যবহার করতে পারেন। এটি আপনার জন্য সবকিছু পরিচালনা করবে:

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

ফায়ারবেস ডক্স: https://firebase.google.com/docs/function/callable

আপনি যদি এসডিকে দীক্ষা দিতে না পারেন তবে অন্যান্য পরামর্শগুলির মর্মার্থ এখানে:


3
আসলে যখন আমি ব্রাউজারে অনকল কল ব্যবহার করি তখন আমার ত্রুটি হয়েছিল। আমি কি এই অনুরোধে পোশাক শিরোনাম সেট করতে পারি?
ভিক্টর হার্ডুবেজ

4

কোনও 'কর্স' লাইব্রেরি আমদানি না করে করগুলি সক্ষম করার একটি উপায় খুঁজে পেয়েছে। এটি Typescriptক্রোম সংস্করণ ৮১.০ এ এটির সাথে কাজ করে এবং পরীক্ষা করে।

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 এ একটি পিছনের স্ল্যাশ। এক্সপ্রেসের সন্ধান ছিল '/'কিন্তু আমার কাছে ফাংশনটির পিছনে স্ল্যাশ নেই [project-id].cloudfunctions.net/[function-name]। সিওআরএস ত্রুটিটি একটি মিথ্যা নেতিবাচক ছিল। আমি যখন পেছনের স্ল্যাশ যুক্ত করেছি, তখন আমি যে প্রত্যাশা প্রত্যাশা করছিলাম তা পেয়েছি।


এটি নিশ্চিত হয়ে নিন যে আপনি [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.com/function/docs/writing/…
কোরি কোল

3

আপনি / যদি কল প্লাগইন ব্যবহার করতে না পারেন তবে কল করুন setCorsHeaders() তবে হ্যান্ডলারের ফাংশনে প্রথমে ফাংশনটি করাও কাজ করবে।

ফিরে জবাব দেওয়ার সময় রেসপন্স / ত্রুটি ফাংশনও ব্যবহার করুন।

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

আপনি যদি স্থানীয়ভাবে ফায়ারবেস অ্যাপ্লিকেশন পরীক্ষা করে থাকেন তবে আপনাকে localhostমেঘের পরিবর্তে ফাংশনগুলি নির্দেশ করতে হবে। ডিফল্টরূপে, firebase serveবাfirebase emulators:start আপনি যখন আপনার ওয়েব অ্যাপ্লিকেশনে এটি ব্যবহার করেন তখন লোকালহোস্টের পরিবর্তে ফাংশনগুলি সার্ভারের দিকে নির্দেশ করে।

ফায়ারবেস আরআইডি স্ক্রিপ্টের পরে এইচটিএমএল হেডে স্ক্রিপ্টের নীচে যুক্ত করুন:

 <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

আপনি যদি এক্সপ্রেস ব্যবহার না করে থাকেন বা কেবল CORS ব্যবহার করতে চান। নিম্নলিখিত কোডটি সমাধানে সহায়তা করবে

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

0

আমার ক্ষেত্রে ত্রুটিটি ক্লাউড ফাংশন ইনভোকার সীমা অ্যাক্সেসের কারণে হয়েছিল। ক্লাউড ফাংশন ইনভোকারে অল ইউজার যুক্ত করুন। দয়া করে লিঙ্কটি ধরুন । আরও তথ্যের জন্য নিবন্ধ পড়ুন দয়া করে


দয়া করে আপনার উত্তরে লিঙ্কযুক্ত উপাদানগুলির কিছু ব্যাখ্যা সরবরাহ করুন, এটি কেন প্রাসঙ্গিক এবং এ জাতীয়
ফায়ারফ্লাই

0

অন্য কোনও সমাধানের কাজ না হলে আপনি সিওআরএস সক্ষম করতে কলটির শুরুতে নীচের ঠিকানাটি যুক্ত করার চেষ্টা করতে পারেন - পুনর্নির্দেশ:

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

জিকুয়েরি এজেএক্স অনুরোধের সাথে নমুনা কোড:

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

0

আমার অভিজ্ঞতার টুকরো যোগ করা হচ্ছে। আমি কেন সিওআরএস ত্রুটি ছিল তা জানার চেষ্টা করে ঘন্টা ব্যয় করেছি।

এটি ঘটে যে আমি আমার ক্লাউড ফাংশনটির নামকরণ করেছি (প্রথম প্রথম আমি বড় আপগ্রেড করার পরে চেষ্টা করছিলাম)।

সুতরাং যখন আমার ফায়ারবেস অ্যাপ্লিকেশনটি একটি মেঘ ফাংশনটিকে একটি ভুল নামে কল দিচ্ছিল, তখন এটি একটি CORS ত্রুটি নয়, একটি 404 ত্রুটি ছুঁড়ে ফেলা উচিত ছিল।

আমার ফায়ারবেস অ্যাপ্লিকেশনে ক্লাউড ফাংশনটির নাম ঠিক করা সমস্যার সমাধান করেছে।

আমি এখানে https://firebase.google.com/support/troubleshooter/report/bugs সম্পর্কে একটি বাগ রিপোর্ট পূরণ করেছি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.