2015-11-17 12 views
5

मैंने पासपोर्ट को एक नोड.जेएस सर्वर पर कॉन्फ़िगर किया है और मुख्य रूप से ट्विटर लेख रणनीति का उपयोग कर रहा हूं।पासपोर्ट.जेएस - ब्राउज़र प्राप्त अनुरोध ठीक है, लेकिन जेएस कोड से AJAX अनुरोध नहीं हैं?

मैं हाल ही की खोज से उलझन में हूं जो ऐसा लगता है कि एक ब्राउज़र यूआरएल (वेब ​​ब्राउजर सर्चबार का उपयोग करके) के साथ एक जीईटी अनुरोध आवेदन कोड के अंदर से AJAX अनुरोध से अलग प्रमाणीकृत प्रतीत होता है। उदाहरण के लिए, यदि मैं पासपोर्ट के साथ लॉगिन करता हूं, तो मैं अपने ब्राउज़र को कुछ यूआरएल पर इंगित करके सबकुछ एक्सेस कर सकता हूं जो सीधे बैकएंड सर्वर से अनुरोध करता है। लेकिन बैकएंड एपीआई के लिए कोणीय या jQuery द्वारा कोई भी अनुरोध अनधिकृत प्रतीत होता है।

क्या यह बिल्कुल सही हो सकता है? यदि हां, तो पासपोर्ट को जेएस कोड के अंदर से ब्राउज़र अनुरोध और AJAX अनुरोध के बीच अंतर कैसे पता चलेगा?

+1

(1) आप बता सकते हैं कि अनुरोध एक एक्सएचआर (AJAX) अनुरोध है या नहीं। (2) शायद यह सही कुकीज़ नहीं होने का सिर्फ एक मुद्दा है; क्या कोणीय या jQuery कोड सटीक होस्टनाम में Node.js सर्वर के रूप में बैठा है? – apscience

+0

देखें http://stackoverflow.com/questions/15945118/detecting-ajax-requests-on-nodejs-with-express – apscience

+0

यह गलत कोडिंग हो सकता है, या आपके कोड पर एक साधारण चूक हो सकती है। निस्संदेह यह जानने का कोई तरीका नहीं है कि –

उत्तर

4

डिफ़ॉल्ट रूप से, एक क्रॉस-मूल XHR अनुरोध में कुकीज शामिल नहीं होंगे (जिनका उपयोग आमतौर पर उन अनुप्रयोगों में राज्य को बनाए रखने के लिए किया जाता है जिन्हें प्रमाणीकरण की आवश्यकता होती है)।

आपको लगता है कि बदल सकते हैं withCredentials की स्थापना द्वारा:

var xhr = new XMLHttpRequest(); 
xhr.open(...); 
xhr.withCredentials = true; 

आप Access-Control-Allow-Credentials: true कहने के लिए सर्वर पर CORS नियम समायोजित करने की आवश्यकता हो सकती है।

MDN भी देखें।

+0

ऐसा लगता है कि यह चाल है। मैं $ httpProvider.defaults का उपयोग करके कोणीय के साथ ऐसा करने में सक्षम था। –

+0

धन्यवाद इसके लिए क्विंटिन, मैंने आपको 150 अंक दिए - हालांकि, एक नई समस्या, आपका समाधान HTTP के लिए काम करता है, लेकिन यह सुनिश्चित नहीं है कि यह HTTPS के लिए काम करता है या नहीं। क्या आपको पता है कि एक्सएचआर के साथ क्रेडेंशियल्स का उपयोग HTTPS के साथ वर्जित है या अतिरिक्त कदम की आवश्यकता है? –

+1

जहां तक ​​मुझे पता है, लेकिन HTTP या इसके विपरीत लोड किए गए पृष्ठ से HTTPS को अनुरोध करना पूरी तरह अवरुद्ध हो सकता है, ऐसा करने से अन्यथा सुरक्षित डेटा के विरुद्ध एक मैन-इन-द-बीच हमला शुरू करने का एक शानदार अवसर मिलता है। – Quentin

1

ट्विटर लेख रणनीति के लिए आवश्यक है कि उपयोगकर्ता ट्विटर पर साइन इन हो और आपके "ऐप" को आपकी ट्विटर खाता जानकारी तक पहुंचने की अनुमति दे। यह एक्सएचआर के साथ नहीं किया जा सकता है क्योंकि उपयोगकर्ता ट्विटर पर लॉग इन करने के लिए अपने ट्विटर प्रमाण-पत्र कैसे दर्ज करेगा यदि उपयोगकर्ता पहले से साइन इन नहीं हुआ था? XHR के माध्यम से अनुरोध भेजा जाता है तो उपयोगकर्ता आपके ट्विटर "ऐप" अनुमतियों को स्वीकार करने का अनुरोध कैसे करेगा?

यह ओएथ या ओपनआईडी का उपयोग करने वाली सभी पासपोर्ट रणनीतियों पर लागू होता है। उपयोगकर्ता के ब्राउज़र को सीधे लेखक प्रदाता की साइट पर जाना पड़ता है ताकि वे या तो ए) एथ प्रदाता या बी में लॉगिन कर सकें) आपके द्वारा अनुरोध किए जा रहे अनुमतियों को स्वीकृति दें। एक बार उपयोगकर्ता ने ऐसा किया है कि लेखक प्रदाता (आपके मामले में ट्विटर) उपयोगकर्ता के ब्राउज़र को आपके एप्लिकेशन के एंडपॉइंट पर वापस किसी प्रकार के टोकन के साथ रीडायरेक्ट करेगा, जिसका उपयोग तब आपके एप्लिकेशन को लेखक प्रदाता से जानकारी का अनुरोध करने के लिए किया जाएगा (जैसे ईमेल पता, पूरा नाम, आदि)

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