gpt4 book ai didi

node.js - 无论如何要在passportjs中设置代理设置?

转载 作者:IT老高 更新时间:2023-10-28 23:26:24 24 4
gpt4 key购买 nike

目前,我正在使用基于 expressjs 的sails 框架,并使用passportjs( http://passportjs.org/ ) 进行yammer 身份验证。

在公司代理后面的服务器上部署我的 Node 应用程序时遇到问题。它无法连接到 yammer 进行 OAuth2 身份验证。

错误如下:

error: failed to obtain access token (Error: connect ETIMEDOUT)    at /root/rlps/node_modules/passport-yammer/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth2.js:125:38    at /root/rlps/node_modules/passport-yammer/lib/passport-yammer/strategy.js:72:20    at ClientRequest. (/root/rlps/node_modules/passport-yammer/node_modules/passport-oauth/node_modules/oauth/lib/oauth2.js:129:5)    at ClientRequest.EventEmitter.emit (events.js:95:17)    at CleartextStream.socketErrorListener (http.js:1547:9)    at CleartextStream.EventEmitter.emit (events.js:95:17)    at Socket.onerror (tls.js:1437:17)    at Socket.EventEmitter.emit (events.js:117:20)    at net.js:441:14    at process._tickDomainCallback (node.js:459:13)

我相信这是因为代理挡住了路。我尝试将所有内容设置为环境值(如 http_proxy 和 https_proxy),但似乎代码不承认它们,需要在 passportjs 中的某个位置进行配置。

那么,有什么好的方法可以在passportjs中设置代理设置或在nodejs中解决这个代理问题吗?

最佳答案

Node.js 默认不使用 http_proxyhttps_proxy 变量。

您必须为请求调整 agent 参数,但由于您无法控制该库,您可以像这样全局更改:

npm i tunnel --save

创建一个 setup_proxy.js:

var env = process.env;

if (!env['http_proxy']) return;

var localUrls = [
'http://some-internal-url.mycompany.local',
];

var url = require('url');
var tunnel = require('tunnel');
var proxy = url.parse(env['http_proxy']);

var tunnelingAgent = tunnel.httpsOverHttp({
proxy: {
host: proxy.hostname,
port: proxy.port
}
});

var https = require('https');
var http = require('http');

var oldhttpsreq = https.request;
https.request = function (options, callback) {

if (localUrls.some(function (u) {
return ~u.indexOf(options.host);
})){
return oldhttpsreq.apply(https, arguments);
}

options.agent = tunnelingAgent;
return oldhttpsreq.call(null, options, callback);
};

var oldhttpreq = http.request;
http.request = function (options, callback) {

if (localUrls.some(function (u) {
return ~u.indexOf(options.host);
})){
return oldhttpreq.apply(http, arguments);
}

options.agent = tunnelingAgent;
return oldhttpreq.call(null, options, callback);
};

一开始就要求这个require('./setup_proxy').

请注意,这对 http 和 https 流量使用相同的 http_proxy 环境变量,但如果您需要更改代码,则很容易遵循。

关于node.js - 无论如何要在passportjs中设置代理设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20533735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com