2016-02-24 8 views
19

दरअसल, हमारा बैकएंड अनुरोध हेडर में कुकी का उपयोग करके अनुरोध प्रमाणित करता है। मुझे पता है कि अगर मैं हेडर "कुकी" सेट करता हूं तो यह मना कर देगा। तो, क्या कुकी को पीछे की तरफ भेजने का कोई तरीका है?Angular2 में सभी अनुरोधों के लिए अनुरोध शीर्षलेख में "कुकी" कैसे भेजें?

उत्तर

38

मुझे लगता है कि एक चरण है जहां आप सर्वर को प्रमाणित करने के लिए कहते हैं। इसके बाद (और यदि प्रमाणीकरण सफल है), सर्वर प्रतिक्रिया में एक कुकी वापस कर देगा। ब्राउज़र इस कुकी को स्टोर करेगा और प्रत्येक कॉल के लिए इसे फिर से भेज देगा।

यह कहा गया कि, क्रॉस डोमेन अनुरोध (सीओआरएस) के मामले में, आपको अपने अनुरोधों में कुकीज़ जोड़ने के लिए XHR के withCredentials को true सेट करने की आवश्यकता है।

Angular2 के साथ इस सक्षम करने के लिए, हम BrowserXhr वर्ग का विस्तार करने की जरूरत है नीचे वर्णित के रूप में:

@Injectable() 
export class CustomBrowserXhr extends BrowserXhr { 
    constructor() {} 
    build(): any { 
    let xhr = super.build(); 
    xhr.withCredentials = true; 
    return <any>(xhr); 
    } 
} 

और विस्तारित साथ BrowserXhr प्रदाता ओवरराइड:

bootstrap(AppComponent, [ 
    HTTP_PROVIDERS, 
    provide(BrowserXhr, { useClass: CustomBrowserXhr }) 
]); 

अधिक जानकारी के लिए इस प्रश्न देखें :

संपादित करें ('freaker टिप्पणी निम्नलिखित)

RC2 से, आप withCredentials संपत्ति सीधे अनुरोध विन्यास के भीतर के रूप में नीचे वर्णित का उपयोग कर सकते हैं:

this.http.get('http://...', { withCredentials: true }) 

संपादित करें ([maxou] टिप्पणी के बाद)

प्रमाण-पत्रों के साथ शामिल करना याद रखें: पर प्रत्येक अनुरोध पर सही है।

+16

यह सुविधा अब कोणीय 2 में जोड़ा गया था। अब आप बस http.get (url, {withCredentials: true}) जैसे कुछ कर सकते हैं। इसलिए इस आसान कामकाज की अब आवश्यकता नहीं है (2.0.0-आरसी 4 या उससे पहले के रूप में)। – freaker

+2

हाँ, आप सही हैं। मुझे आरसी 2 में जोड़ा गया था। मैंने तदनुसार अपना जवाब अपडेट किया। इस बिंदु को इंगित करने के लिए बहुत बहुत धन्यवाद ;-) –

+4

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

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