2013-04-10 13 views
7

ओएथ नृत्य के चरणों में से एक को एक्सेस टोकन के लिए कॉलबैक के माध्यम से प्राप्त कोड का आदान-प्रदान करना शामिल है। विशेष रूप से फेसबुक सर्वर साइड प्रमाणन के लिए, निम्न https GET अनुरोध प्रतिक्रिया शरीर में एक्सेस कोड प्रस्तुत करती है:node.js https.get() त्रुटि त्रुटि ECONNREFUSED

https.get(/**String | Object*/ options, function (res) { 
    res.setEncoding('utf8'); 

    res.on('data', function (data) { 
    // parse response body 
    }); 

}).on('error',function (e) { 
     Log.w(TAG, "Error requesting access_token", e); 
}).end(); 

त्रुटि है: जब इस प्रकार कनेक्ट करने का प्रयास

https://graph.facebook.com/oauth/access_token? 
    client_id=YOUR_APP_ID 
    &redirect_uri=YOUR_REDIRECT_URI 
    &client_secret=YOUR_APP_SECRET 
    &code=CODE_GENERATED_BY_FACEBOOK 

Node.js एक त्रुटि आग :

{ code: 'ECONNREFUSED', 
    errno: 'ECONNREFUSED', 
    syscall: 'connect' } 

कॉल wget/curl के साथ ठीक काम करता है, इसलिए यह आउटगोइंग फ़ायरवॉल नियमों या ऐसे प्रश्नों का सवाल नहीं है। नोड अनुरोध के साथ क्या गलत है?

उत्तर

10

समस्या को बाहर करता है https प्रमाणपत्र सत्यापन विफलता थी। नोड के https.request() docs से:

rejectUnauthorized: अगर सही है तो सर्वर प्रमाणपत्र आपूर्ति CA की सूची के खिलाफ सत्यापित है। सत्यापन विफल होने पर एक 'त्रुटि' ईवेंट उत्सर्जित होता है। HTTP अनुरोध भेजे जाने से पहले सत्यापन स्तर पर सत्यापन होता है। डिफ़ॉल्ट सच

जब तक स्पष्ट रूप से प्रदान की है, http [एस] [अनुरोध | मिलता है]। वैश्विक एजेंट जो सहित rejectUnauthorized झंडा tls.connect() विकल्पों पर ध्यान नहीं देता का उपयोग करेगा। प्राप्त करने के लिए कॉल (या अनुरोध) को संशोधित करने की आवश्यकता है:

var options = require('url').parse(/**String*/ url); 
options.rejectUnauthorized = false; 
options.agent = new https.Agent(options); 

https.get(/**Object*/ options, function (res) { 
    // handle response & body 
}).on('error',function (e) { 
    // handle errors 
}).end(); 
+0

धन्यवाद। मैं एक समान मुद्दे में भाग रहा था। – Nate

+0

@ वेनकैट आप जानते हैं कि आप अपना खुद का (उत्कृष्ट) उत्तर स्वीकार कर सकते हैं :) – Ben

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