फायरबेस स्टोरेज और एक्सेस-कंट्रोल-अलाउंस-ओरिजिन


86

मैं एक XMLHttpRequest के माध्यम से फायरबेस स्टोरेज से फाइलें डाउनलोड करने की कोशिश कर रहा हूं, लेकिन संसाधन पर एक्सेस-कंट्रोल-अनुमति-उत्पत्ति सेट नहीं है, इसलिए यह संभव नहीं है। क्या इस हेडर को स्टोरेज सर्वर पर सेट करने का कोई तरीका है?

  (let [xhr (js/XMLHttpRequest.)]
    (.open xhr "GET" url)
    (aset xhr "responseType" "arraybuffer")
    (aset xhr "onload" #(js/console.log "bin" (.-response xhr)))
    (.send xhr)))

Chrome त्रुटि संदेश:

XMLHttpRequest https://firebasestorage.googleapis.com/ को लोड नहीं कर सकता है। [ ] कोई अनुरोधित संसाधन पर 'एक्सेस-कंट्रोल-अनुमति-उत्पत्ति' हेडर मौजूद नहीं है। उत्पत्ति ' http: // localhost: 3449 ' इसलिए पहुंच की अनुमति नहीं है।


1
एक टिप्पणी के लिए पर्याप्त प्रतिनिधि नहीं है, लेकिन उपरोक्त तरीका अभी भी सही तरीका है। बस इस पर आधिकारिक फायरबेस डॉक्स को साझा करना चाहते थे: firebase.google.com/docs/storage/web/…
एंड्रयू मैकॉलेश

जवाबों:


172

इस पोस्ट से फायरबेस-टॉक ग्रुप / लिस्ट पर :

CORS के लिए अपने डेटा को कॉन्फ़िगर करने का सबसे आसान तरीका gsutilकमांड लाइन टूल है। इसके लिए स्थापना निर्देश https://cloud.google.com/storage/docs/gsutil_installgsutil पर उपलब्ध हैं । एक बार जब आप इसके साथ स्थापित और प्रमाणित हो जाते हैं, तो आप इसका उपयोग कोर को कॉन्फ़िगर करने के लिए कर सकते हैं।gsutil

उदाहरण के लिए, यदि आप अपने कस्टम डोमेन से ऑब्जेक्ट डाउनलोड करने की अनुमति देना चाहते हैं, तो इस डेटा को cors.json नामक फ़ाइल में रखें ( "https://example.com"अपने डोमेन के साथ प्रतिस्थापित करना):

[
  {
    "origin": ["https://example.com"],
    "method": ["GET"],
    "maxAgeSeconds": 3600
  }
]

फिर, इस कमांड को चलाएं ( "exampleproject.appspot.com"अपनी बाल्टी के नाम के साथ):

gsutil cors set cors.json gs://exampleproject.appspot.com

और आपको सेट किया जाना चाहिए।

यदि आपको अधिक जटिल कॉर्स कॉन्फ़िगरेशन की आवश्यकता है, तो डॉक्स को https://cloud.google.com/storage/docs/cross-origin#Configuring-Cors-on-a-Bucket पर देखें


5
क्या एक्सेस-कंट्रोल-अनुमति-उत्पत्ति के समान सभी मूलों को अनुमति देने का एक तरीका है: *?
डूडरसन

5
मैं अपने फायरबेस बाल्टी का सटीक नाम कैसे पा सकता हूं?
जिम

11
@ user1311069 "origin": ["*"],इसके बजाय का उपयोग करें"origin": ["https://example.com"],
rigdonmr

8
फायरबेस को वास्तव में ऐसा करने के लिए एक उपयोगकर्ता के अनुकूल तरीके का पता लगाने की आवश्यकता है। एक वास्तविक Firebase डेटाबेस पर अनुमतियाँ सेट करना लगभग निराश करने वाला नहीं है और न ही S3 बकेट अनुमतियाँ सेट कर रहा है। इस समय S3 के लिए मजबूत प्राथमिकता।
मैट जेन्सेन

43
यदि आप उपयोग को स्थापित नहीं करना चाहते हैं, तो एक आसान तरीका यह है कि कंसोल.क्लाउड.होम पर जाएं और शीर्ष दाईं ओर "Google क्लाउड शेल सक्रिय करें" पर क्लिक करें। यह पहले से इंस्टॉल किए गए gsutil के साथ एक खोल खोलेगा, और आपके फायरबेस भंडारण परियोजनाओं तक पहुंच के साथ। (शेल में मैंने एक gsutil cors set myjson.json gs://projectname.appspot.com
पोज़

47

Google क्लाउड में अब इस प्रक्रिया को और भी आसान बनाने के लिए एक इनलाइन संपादक है। अपने स्थानीय सिस्टम पर कुछ भी स्थापित करने की आवश्यकता नहीं है।

  1. जीसीपी कंसोल खोलें और >_शीर्ष नावबार में आइकन बटन पर क्लिक करके क्लाउड टर्मिनल सत्र शुरू करें।
  2. संपादक खोलने के लिए पेंसिल आइकन पर क्लिक करें, फिर cors.jsonफ़ाइल बनाएं ।
  3. Daud gsutil cors set cors.json gs://your-bucket

यहां छवि विवरण दर्ज करें


चरण 1 पर अटकें "कृपया समझाएं" और एक क्लाउड टर्मिनल सत्र शुरू करें "मैं कंसोल को खोलता हूं और कोई बटन नहीं देखता, या" क्लाउड टर्मिनल सत्र शुरू करने के लिए लिंक "
Fortesl

3
यह शीर्ष दाईं ओर का आइकन है जो देखने में ऐसा लगता है>_
JeffD23

यदि आवश्यक हो तो रिवर्स करने के लिए पहले मौजूदा कॉर्स कॉन्फिगर को खींचने के लिए एक सीधा आगे रास्ता है?
डेविड

मैंने यह कोशिश की, लेकिन यह काम नहीं किया।
user683742

इसने मेरे लिए काम किया
सुल्तानमिर्ज़ा कासिमबेकोव ने

18

बस जवाब में जोड़ना चाहते हैं। बस Google कंसोल (कंसोल.क्लाउड.होम) में अपनी परियोजना पर जाएं और अपनी परियोजना चुनें। टर्मिनल खोलें और बस cors.json फ़ाइल ( touch cors.json) बनाएं और फिर उत्तर का पालन करें और इस फ़ाइल को संपादित करें ( vim cors.json) @ frank-van-puffelen द्वारा सुझाए गए अनुसार

इसने मेरे लिए काम किया। चीयर्स!


कंसोल पर वेब कंसोल .cloud.google.com/home मुझे एक त्रुटि दे रहा था, लेकिन Google क्लाउड एसडीके शेल के साथ ठीक काम किया।
फायरिंगब्लांक

3
... वहाँ टर्मिनल खोलें और ... आप टर्मिनल कैसे खोलते हैं? मुझे लिंक पर कोई "ओपन टर्मिनल" बटन नहीं दिख रहा है
फोर्टिसल

सुनिश्चित करें कि आप cloudउपडोमेन पर हैं, firebaseएक नहीं ("कंसोल.क्लाउड.होम") और >_ऊपर दाईं ओर आइकन बटन देखें।
क्रिस विला

1

ऐसा करने के लिए एक और दृष्टिकोण Google JSON API का उपयोग कर रहा है। चरण 1: JSON एपीआई के साथ उपयोग करने के लिए टोकन प्राप्त करें। टोकन का उपयोग करने के लिए जाएं : https://developers.google.com/oauthplayground/ फिर JSON API या संग्रहण के लिए खोज करें आवश्यक विकल्पों का चयन करें अर्थात पढ़ें, लिखें, full_access (उन पर टिक करें जो आवश्यक हैं) एक्सेस टोकन प्राप्त करने के लिए प्रक्रिया का पालन करें, जो एक घंटे के लिए वैध होगा। चरण 2: कॉर्स को अपडेट करने के लिए Google JSON API को हिट करने के लिए टोकन का उपयोग करें

नमूना कर्ल:

    curl -X PATCH \
  'https://www.googleapis.com/storage/v1/b/your_bucket_id?fields=cors' \
  -H 'Accept: application/json' \
  -H 'Accept-Encoding: gzip, deflate' \
  -H 'Authorization: Bearer ya29.GltIB3rTqQ2tJgh0cMj1SEa1UgQNJnTMXUjMlMIRGG-mBCbiUO0wqdDuEpnPD6cbkcr1CuLItuhaNCTJYhv2ZKjK7yqyIHNgkCBup-T8Z1B1RiBrCgcgliHOGFDz' \
  -H 'Content-Type: application/json' \
  -H 'Postman-Token: d19f29ed-2e80-4c34-85ee-c46c9058fac0' \
  -H 'cache-control: no-cache' \
  -d '{
  "location": "us",
  "storageClass": "Standard",
  "cors": [
      {
          "maxAgeSeconds": "360000000",
          "method": [
             "GET",
             "HEAD",
             "DELETE"
          ],
          "origin": [
             "*"
          ],
          "responseHeader":[
            "Content-Type"
         ]
      }
  ]
}'

0

मैं एक समाधान की सख्त जरूरत में उन लोगों के लिए जोड़ना चाहूंगा जैसे मैं यह सब करने की कोशिश कर रहा था और समस्या को हल नहीं कर रहा था। मुझे 3 समाधानों की पेशकश करते हुए एक शानदार लेख मिला, और पहले वाले ने मेरे लिए काम किया .. एक Google क्रोम प्लगइन .. yeap ..!

moesif CORS एक्सटेंशन स्थापित करने के बाद सुनिश्चित करें, आप इसे चालू करते हैं


2
यह वास्तव में अज्ञात उपयोगकर्ता के लिए क्षेत्र में समस्या का समाधान नहीं करता है - केवल एक मशीन के लिए।
एलिमेंटल

0

किसी भी संसाधन के साथ एक CORS हेडर लागू करने के लिए, आप एक छोटी सी परियोजना का उपयोग कर सकते हैं जिसे मैंने खुद के लिए गोलंग में बनाया था - https://proxify-cors.herokuapp.com/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.