2013-04-10 35 views
7

Một trong các bước của điệu nhảy OAuth liên quan đến việc trao đổi mã nhận được qua gọi lại cho mã thông báo truy cập. Cụ thể cho Facebook phía máy chủ auth, https sau GET yêu cầu trả về mã truy cập trong cơ thể phản ứng:node.js https.get() cháy lỗi 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 cháy một lỗi khi cố gắng kết nối như sau:

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

Lỗi này là :

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

Cuộc gọi hoạt động tốt với wget/curl nên không phải là câu hỏi về quy tắc tường lửa ngoại tuyến. Điều gì là sai với yêu cầu nút?

Trả lời

10

Tắt vấn đề là lỗi xác minh chứng chỉ https. Từ https.request nút() của docs:

rejectUnauthorized: Nếu đúng, chứng chỉ máy chủ được xác minh so với danh sách đã cung cấp CA. Sự kiện 'lỗi' được phát ra nếu xác minh không thành công. Quá trình xác minh diễn ra ở cấp kết nối, trước khi yêu cầu HTTP được gửi. Mặc định là đúng.

Trừ khi được cung cấp một cách rõ ràng, http [s] [yêu cầu | được]. Sẽ sử dụng chất độc da toàn cầu mà bỏ qua tls.connect() tùy chọn bao gồm các rejectUnauthorized cờ. Cuộc gọi nhận (hoặc yêu cầu) cần phải được sửa đổi như vậy:

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

Cảm ơn bạn. Tôi đã chạy vào một vấn đề tương tự. – Nate

+0

@Venkat bạn biết bạn có thể chấp nhận câu trả lời của riêng bạn (xuất sắc) :) – Ben

Các vấn đề liên quan