क्रॉस-डोमेन पोस्ट के साथ क्रेडेंशियल भेजना?


81

क्रेडेंशियल के साथ अनुरोधों के अनुसार , फ़ायरफ़ॉक्स केवल क्रॉस-डोमेन पोस्ट के साथ क्रेडेंशियल भेज देगा यदि

invocation.withCredentials = "true";

सेट है ... लेकिन ऐसा नहीं लगता कि jQuery का Ajax API इसके लिए कोई तंत्र प्रदान करता है।

क्या कोई ऐसी चीज़ है जो मुझे याद आ गई है? क्या कोई और तरीका है जो मैं कर सकता हूं?

जवाबों:


168

कार्यक्षमता को jQuery 1.5 में तोड़ा जाना चाहिए।

JQuery 1.5.1 के बाद से आपको xhrFields param का उपयोग करना चाहिए।

$.ajaxSetup({
    type: "POST",
    data: {},
    dataType: 'json',
    xhrFields: {
       withCredentials: true
    },
    crossDomain: true
});

डॉक्स: http://api.jquery.com/jQuery.ajax/

रिपोर्ट की गई बग: http://bugs.jquery.com/ticket/8146


2
अब मैं कुकी को उपडोमेन के लिए भेज सकता हूं :) धन्यवाद!
राडेक

7
क्या यह क्रॉस (गैर-उपडोमेन) अजाक्स अनुरोधों के लिए भी काम करना है?
स्ट्रीटलाइट

मैं अभी भी क्रेडेंशियल्स के लिए प्रेरित हो रहा हूं
जॉन ग्रैन्संकी

@JohnGrabanski क्या आपने अपना मुद्दा ठीक किया?
सेलेमन

41

आप beforeSendअतिरिक्त पैरामीटर सेट करने के लिए कॉलबैक का उपयोग कर सकते हैं ( XMLHTTPRequestऑब्जेक्ट को इसके एकमात्र पैरामीटर के रूप में पास किया गया है)।

बस आप जानते हैं, इस प्रकार का क्रॉस-डोमेन अनुरोध सामान्य साइट परिदृश्य में काम नहीं करेगा और किसी अन्य ब्राउज़र के साथ नहीं। मुझे यह भी पता नहीं है कि FF 3.5 क्या सुरक्षा सीमाएं लागू करता है, बस इसलिए कि आप अपने सिर को दीवार के खिलाफ कुछ भी नहीं हराएं:

$.ajax({
    url: 'http://bar.other',
    data: { whatever:'cool' },
    type: 'GET',
    beforeSend: function(xhr){
       xhr.withCredentials = true;
    }
});

इससे सावधान रहने वाली एक और बात यह है कि ब्राउज़र अंतर को सामान्य करने के लिए jQuery सेटअप है। आपको लग सकता है कि jQuery लाइब्रेरी द्वारा आगे की सीमाएँ लगाई गई हैं जो इस प्रकार की कार्यक्षमता को रोकती हैं।


2
Api.jquery.com/jQuery.post के अनुसार यह टाइप होना चाहिए: "GET" और विधि नहीं: 'GET' मैंने आपके उदाहरण का उपयोग करते समय इस पर ट्रिप किया
Xosofox

1
@Xosofox मुझे पता है कि यह एक पुरानी टिप्पणी है, लेकिन jQuery 1.9 के रूप में method: 'GET'समर्थित है। api.jquery.com/jquery.ajax
ब्रैड

1
ध्यान दें कि यह अब jQuery 3+ में काम नहीं करता है, क्योंकि (ए) इस फ़ंक्शन के लिए एपीआई बदल गया है, और (बी) यह अब एक्सएचआर ऑब्जेक्ट तक पहुंच नहीं है, जो इस फ़ंक्शन के चलने के बाद बनाया गया है। इसके बजाय, आपको xhrFields का उपयोग करना चाहिए।
cuniculus

2

JQuery 3 और शायद पहले के संस्करणों में, निम्नलिखित सरल विन्यास व्यक्तिगत अनुरोधों के लिए भी काम करता है:

$.ajax(
        'https://foo.bar.com,
        {
            dataType: 'json',
            xhrFields: {
                withCredentials: true
            },
            success: successFunc
        }
    );

पूर्ण त्रुटि मुझे फ़ायरफ़ॉक्स देव टूल्स में मिल रही थी -> नेटवर्क टैब (एक व्यक्तिगत अनुरोध के लिए सुरक्षा टैब में) था:

Foo.bar.com.SSL सहकर्मी से कनेक्शन के दौरान एक त्रुटि हुई, जो सुरक्षा मापदंडों के स्वीकार्य सेट पर बातचीत करने में असमर्थ था। यह कोड: SSL_ERROR_HANDSHAKE_FAILURE_ALERT

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