2013-04-10 11 views
7

Jednym z kroków tańca OAuth jest wymiana kodu otrzymanego przez wywołanie zwrotne dla tokena dostępu. Specjalnie dla Facebooku po stronie serwera uwierzytelniania, następujące https GET żądanie zwraca kod dostępu w organizmie reakcji:node.js https.get() uruchamia błąd ECONNREFUSED

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 pożary błąd podczas próby połączenia tak:

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(); 

Błąd jest :

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

Połączenie działa dobrze z wget/curl, więc nie jest to kwestia wychodzących reguł zapory sieciowej lub takich. Co jest nie tak z żądaniem węzła?

Odpowiedz

10

Okazało się, że problem polegał na niepowodzeniu weryfikacji certyfikatu https. Od węzła https.request() docs:

rejectUnauthorized: Jeśli to prawda, czy certyfikat serwera jest weryfikowana z listą dostarczoną urzędów. Zdarzenie "błąd" jest emitowane, jeśli weryfikacja nie powiedzie się. Weryfikacja odbywa się na poziomie połączenia przed wysłaniem żądania HTTP. Domyślnie prawda.

O ile nie jest to wyraźnie przewidziane http [s] [prośba | get]. Użyje globalny środek, który ignoruje tls.connect() opcji, włączając rejectUnauthorized flagę. Wezwanie do uzyskania (lub żądania) musi zostać zmienione w następujący sposób:

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

Dziękuję. Wystąpił podobny problem. – Nate

+0

@Venkat wiesz, że możesz zaakceptować własną (doskonałą) odpowiedź :) – Ben

Powiązane problemy