2016-08-09 22 views
5

निम्न कोड (PouchDB Authentication प्लगइन का उपयोग करके) विफल रहता है क्योंकि यह ब्राउज़र को सीओआरएस प्रीफलाइट अनुरोध भेजने के लिए ट्रिगर करता है, और कॉच डीबी OPTIONS HTTP विधि का समर्थन नहीं करता है।सीओआरएस प्रीफलाइट अनुरोध ट्रिगर करने वाला पाउचडीबी प्रमाणीकरण

var db = new PouchDB("http://localhost:5984/mydb"); 
db.login('username', 'password'); 
// assume the database URL and login info are valid 

यहां त्रुटि (क्रोम में) है। ध्यान दें कि यह समस्या एज में भी होती है, लेकिन फ़ायरफ़ॉक्स में नहीं:

XMLHttpRequest http://localhost:5984/_session लोड नहीं कर सकता है। preflight के लिए प्रतिक्रिया अमान्य HTTP स्थिति कोड है 405

और यहाँ हेडर कि क्रोम अनुरोध के लिए (वे फ़ायरफ़ॉक्स में काफी अलग नहीं हैं) भेज रहा है कर रहे हैं: के माध्यम से CORS

POST /_session HTTP/1.1 
Host: localhost:8080 
Connection: keep-alive 
Content-Length: 25 
Accept: application/json 
Origin: http://localhost:8080 
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 
Content-Type: application/x-www-form-urlencoded 
Referer: http://localhost:8080/ 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.8,es-419;q=0.6,es;q=0.4 

मैं पहले से ही सक्षम किया है add-cors-to-couchdb नोड स्क्रिप्ट। बातें जो मैंने कोशिश की है:

  • मैन्युअल OPTIONS एक विधि के रूप [cors] के तहत मेरे local.ini
  • तीसरा तर्क के रूप में { ajax: { content_type: "text/plain" } } पासिंग में login

तो में जोड़ने से, मेरे सवाल यह है:

  • मैं प्रीफलाइट अनुरोध को ट्रिगर होने से कैसे रोक सकता हूं? MDN documentation पर देखकर, यह आवश्यक प्रतीत नहीं होता है।
  • यदि पिछला संभव नहीं है, तो मैं अपने कॉच डीबी सर्वर को प्रीफलाइट अनुरोधों का जवाब देने के लिए कैसे सेट कर सकता हूं?

उत्तर

2

इसी समस्या को मारना। ऐसा लगता है कि क्रोम ने हाल ही में विकल्प प्रीफलाइट भेजने के बारे में थोड़ा अधिक आक्रामक होना शुरू कर दिया है। एक आंशिक काम के आसपास के बजाय CORS हेडर में एक विशिष्ट मूल '*', तो

curl -X PUT $HOST/_config/cors/origins -d '"localhost:8080"' 

या इसी तरह के निर्दिष्ट करने के लिए किया गया था।

मुझे अभी भी प्रीफलाइट त्रुटि मिल रही है, लेकिन अब PouchDB सफलतापूर्वक प्रमाणित करता है, इसलिए मैं केवल त्रुटि को अनदेखा कर सकता हूं। मुझे लगता है कि फिक्स को _session url पर विकल्प का जवाब देने के लिए CouchDB प्राप्त करना है।

संपादित करें, अधिक जानकारी के लिए यहाँ https://github.com/nolanlawson/pouchdb-authentication/issues/111

+0

सुझाव के लिए धन्यवाद। दुर्भाग्यवश, जब मैंने वर्णन के रूप में उत्पत्ति को निर्दिष्ट करने का प्रयास किया, तो परिणाम पहले जैसा था (समान त्रुटि, कोई प्रमाणीकरण नहीं)। लिंक के लिए भी धन्यवाद, जानकारी बहुत उपयोगी है! – rvighne

संबंधित मुद्दे