2017-03-24 10 views
20

मैं क्लाइंट से एक्सिस का उपयोग कर अपने Express.js सर्वर पर अनुरोध भेज रहा हूं।एक्सिस को स्वचालित रूप से अपने अनुरोधों में कुकीज़ भेजें

मैंने क्लाइंट पर एक कुकी सेट की है और मैं हाथ से अनुरोध करने के लिए मैन्युअल रूप से जोड़ने के बिना सभी एक्सिस अनुरोधों से उस कुकी को पढ़ना चाहता हूं।

यह मेरा clientside अनुरोध उदाहरण है:

axios.get(`some api url`).then(response => ... 

मैं अपने Express.js सर्वर में इन गुणों का उपयोग करके हेडर या कुकीज़ पहुँचने का प्रयास किया:

req.headers 
req.cookies 

न तो उनमें से किसी कुकीज़ निहित।

app.use(cookieParser()) 

मैं Axios स्वचालित रूप से अनुरोध में कुकीज़ कैसे कर सकता हूँ: मैं कुकी पार्सर मिडलवेयर उपयोग कर रहा हूँ?

संपादित करें:

मैं इस तरह ग्राहक पर कुकी सेट:

import cookieClient from 'react-cookie' 

... 
let cookie = cookieClient.load('cookie-name') 
if(cookie === undefined){ 
     axios.get('path/to/my/cookie/api').then(response => { 
     if(response.status == 200){ 
      cookieClient.save('cookie-name', response.data, {path:'/'}) 
     } 
     }) 
    } 
... 

हालांकि यह भी Axios उपयोग कर रहा है, यह सवाल करने के लिए प्रासंगिक नहीं है। कुकी सेट होने के बाद मैं बस अपने सभी अनुरोधों में कुकीज़ एम्बेड करना चाहता हूं।

+0

आपने क्लाइंट पर कुकी कैसे सेट की? कृपया कोड उदाहरण दिखाएं :) –

+0

@TzookBarNoy प्रश्न में जोड़ा गया कोड – Kunok

उत्तर

43

मुझे एक ही समस्या थी और withCredential संपत्ति द्वारा इसे ठीक किया गया।

किसी भिन्न डोमेन से XMLHttpRequest अपने डोमेन के लिए कुकी मान सेट नहीं कर सकता है जब तक कि अनुरोध करने से पहले प्रमाण-पत्र सत्य पर सेट न हो जाएं।

axios.get('some api url', {withCredentials: true}); 
+0

मैं इस उत्तर को स्वीकार करता हूं क्योंकि यह पहला और सही रूप से स्वरूपित है, धन्यवाद! – Kunok

+0

यदि आप किसी एक्सप्रेस ऐप से कनेक्ट करने का प्रयास कर रहे हैं - तो आपको कॉर्स का उपयोग करने और इन सेटिंग्स का उपयोग करने की आवश्यकता होगी। अनुरोध की उत्पत्ति आवश्यक है। app.use (cors ({credentials: true, origin: 'http: // localhost: 8080'})); – DogCoffee

+1

ध्यान दें कि यह केवल तभी काम करेगा जब प्रतिक्रिया शीर्षलेख में 'एक्सेस-कंट्रोल-अनुमति-उत्पत्ति' वाइल्डकार्ड पर सेट नहीं है (*) –

1

आप दोनों को मिश्रित लगता है।

आपके पास "प्रतिक्रिया-कुकी" और "Axios"

प्रतिक्रिया-कुकी =>

Axios क्लाइंट की तरफ कुकी से निपटने के लिए है => सर्वर से ajax अनुरोध भेजने के लिए है

उस जानकारी के साथ, यदि आप बैकएंड पक्ष में क्लाइंट साइड से कुकीज़ को भी सूचित करना चाहते हैं, तो आपको उन्हें एक साथ कनेक्ट करने की आवश्यकता होगी। "प्रतिक्रिया-cookie" रीडमी से

नोट:

isomorphic कुकीज़!

सर्वर-प्रतिपादन करते समय उपयोगकर्ता कुकीज़ तक पहुंचने में सक्षम होने के लिए, आप प्लगToRequest या setRawCookie का उपयोग कर सकते हैं।

link to readme

यदि यह आप क्या जरूरत है, महान।

यदि नहीं, तो कृपया टिप्पणी करें ताकि मैं और विस्तार कर सकूं।

+0

'plugToRequest' वास्तव में क्या करता है? मैंने नोड सर्वर पर कुकीज़ तक पहुंचने का विचार किया, सभी को 'कुकी-पार्सर' मिडलवेयर (एक्सप्रेस धारण करना) है? – geoboy

5

मैं Axios से परिचित नहीं हूँ, लेकिन जहाँ तक मुझे पता है जावास्क्रिप्ट और ajax में वहाँ एक विकल्प

withCredentials: true 

यह स्वचालित रूप से क्लाइंट साइड करने के लिए कुकी भेज देंगे है। उदाहरण के लिए, इस परिदृश्य भी passportjs साथ उत्पन्न होता है, जो सर्वर

1

एक अन्य समाधान इस लाइब्रेरी का उपयोग करने के लिए है पर एक कुकी सेट:

https://github.com/3846masa/axios-cookiejar-support

जो Axios करने के लिए "कठिन कुकी" समर्थन को एकीकृत । ध्यान दें कि इस दृष्टिकोण को अभी भी withCredentials ध्वज की आवश्यकता है।

2

एक्सप्रेस प्रतिक्रिया में आवश्यक शीर्षलेख सेट करना भी महत्वपूर्ण है। ये वे हैं जो मेरे लिए काम करते हैं:

app.use(function(req, res, next) { 
    res.header('Access-Control-Allow-Origin', yourExactHostname); 
    res.header('Access-Control-Allow-Credentials', true); 
    res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); 
    next(); 
}); 
+0

** 'एक्स-पिंगोदर' ** को 'एक्सेस-कंट्रोल-स्वीट-हेडर' में जोड़ना मेरे लिए अनिवार्य रहा है (एक्सप्रेस 4.16, क्रोम 63 के साथ नोड.जेएस 6.9)। इस गीटहब मुद्दे पर ** जेकइल्डर ** की पोस्ट की जांच करें: https://github.com/axios/axios/issues/191#issuecomment-311069164 –

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