Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Facebook检测到';App&x27;isn';t使用安全连接传输信息_Node.js_Heroku_Facebook Graph Api_Facebook Login - Fatal编程技术网

Node.js Facebook检测到';App&x27;isn';t使用安全连接传输信息

Node.js Facebook检测到';App&x27;isn';t使用安全连接传输信息,node.js,heroku,facebook-graph-api,facebook-login,Node.js,Heroku,Facebook Graph Api,Facebook Login,我有一个nodejs应用程序来验证使用Facebook的用户。该应用程序是使用Heroku部署的。对于localhost,它可以正常工作,但对于已部署的站点URL不起作用。我该如何解决这个问题 Heroku原木 2021-04-24T09:58:58.154550+00:00 app[web.1]: (node:4) UnhandledPromiseRejectionWarning: MongooseError: Operation `users.findOne()` buffering ti

我有一个nodejs应用程序来验证使用Facebook的用户。该应用程序是使用Heroku部署的。对于localhost,它可以正常工作,但对于已部署的站点URL不起作用。我该如何解决这个问题

Heroku原木

2021-04-24T09:58:58.154550+00:00 app[web.1]: (node:4) UnhandledPromiseRejectionWarning: MongooseError: Operation `users.findOne()` buffering timed out after 10000ms
2021-04-24T09:58:58.154565+00:00 app[web.1]: at Timeout.<anonymous> (/app/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:185:20)
2021-04-24T09:58:58.154566+00:00 app[web.1]: at listOnTimeout (internal/timers.js:554:17)
2021-04-24T09:58:58.154567+00:00 app[web.1]: at processTimers (internal/timers.js:497:7)
2021-04-24T09:58:58.154668+00:00 app[web.1]: (node:4) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 4)
2021-04-24T09:59:17.992947+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/auth/facebook/callback?code=AQCWsZz7kdnjlF6b-4UltHiCo8nvktLXI8pwtEm65SO6DbH78h6dzTvygqZkUE2eg9WVufXyLdXUgX58_65TTb54zPWXN1sdTBTMltjO3nm_49XeWBqkcYa3qLcXUV_LwS2H_v2DpMbTTpcL5o430yHsdC3J4SF4VsXEV0tQ2E6wYgh9zMVBL-b7Omj8n_vIvLPqMlAnccP8PFMZOeV8UV0b0DovUNL8dd930aL12-x1RNdlw_yvq7G3TqpKXCq64Ny-hkNsTeSRSR0qEpiWUoC_afLMi-VoU1AiFp3gCfsWSumfQcsDWvwAv1eJDY9T48b6XP0i_u8f7FnQySExnrFl" host=authenticate-backend.herokuapp.com request_id=244f274e-ae42-4560-9f8f-078dbf987f6f fwd="116.206.223.233" dyno=web.1 connect=1ms service=30000ms status=503 bytes=0 protocol=https
2021-04-24T10:04:39.435159+00:00 heroku[router]: at=info method=GET path="/" host=authenticate-backend.herokuapp.com request_id=d30d85eb-9137-43c5-8d5f-b6bd300094f4 fwd="116.206.223.233" dyno=web.1 connect=1ms service=2ms status=304 bytes=181 protocol=https

2021-04-24T09:58:58.154550+00:00应用程序[web.1]:(节点:4)未经处理的PromisejectionWarning:MongooseError:Operation`users.findOne()`缓冲在10000ms后超时
2021-04-24T09:58:58.154565+00:00应用程序[web.1]:超时时。(/app/node_modules/mongoose/lib/drivers/node mongodb native/collection.js:185:20)
2021-04-24T09:58:58.154566+00:00应用程序[web.1]:在listOnTimeout(internal/timers.js:554:17)
2021-04-24T09:58:58.154567+00:00应用程序[web.1]:at进程计时器(internal/timers.js:497:7)
2021-04-24T09:58:58.154668+00:00应用程序[web.1]:(节点:4)未处理的Promisejection警告:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。要在未处理的承诺拒绝时终止节点进程,请使用CLI标志“---unhandled rejections=strict”(请参阅https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (拒绝id:4)
2021-04-24T09:59:17.992947+00:00 heroku[路由器]:at=错误代码=H12 desc=“请求超时”方法=获取路径="/2.这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是,这个词的意思是一个单词的意思是,这个词的意思是一个中国的意思是一个中国的意思是一个中国的意思是一个中国的意思是一个由一个由一个由一个中国政府的一个由一个中国的4个中国的4个中国的4个中国的4个中国的4个中国政府的4级(4个中国的4个中国的4个中国的4个中国政府的4个中国的4个中国的4个fswsumfqcsdwvwav1ejdy9t48b6XP0i_u8f7FnQySExnrFl“主机=authenticate-backend.herokuapp.com请求_id=244f274e-ae42-4560-9f8f-078dbf987f6f fwd=“116.206.223.233”dyno=web.1连接=1ms服务=30000ms状态=503字节=0协议=https
2021-04-24T10:04:39.435159+00:00 heroku[router]:at=info method=GET path=“/”host=authenticate-backend.herokuapp.com request_id=d30d85eb-9137-43c5-8d5f-B6BD30094F4 fwd=“116.206.223.233”dyno=web.1 connect=1ms service=2ms status=304字节=181协议=https

听起来您的问题与facebook策略的完整回调url在应用程序在代理后运行时的重建方式有关

在代码指定的相对回调url的情况下,facebook策略实际上会调用以下函数来获得完整的url—只需稍微简化一些基本的位:

function originalURL(req, options) {
    var trustProxy = req.app.get('trust proxy')) ? true : false;

    var isConnectionSecure = req.connection.encrypted || (trustProxy && 'https' == req.headers['x-forwarded-proto'].split(/\s*,\s*/)[0])
    var protocol = isConnectionSecure ? 'https' : 'http'
    // ...

    return protocol + '://' + host + path;
};
本质上,它试图了解传入请求是否通过安全通道传输

  • 它首先查看当前连接是否实际加密
  • 如果不是,它将检查请求是否由受信任的代理转发,其中客户端和代理之间的连接是加密的
只有在其中一种情况下,回调url的协议才会设置为https

据我所知,Heroku使用代理在内部使用常规http重定向流量,因此您需要将应用程序设置为信任它

app.enable('trust proxy')

正如我在聊天中提到的,后来在mongoose评论中提出的另一个问题与所问的问题完全不同。

在身份验证流程的哪一点上,您会遇到此错误?我认为它发生在回调部分,尽管我不确定。这就是我得到此Popup的原因。我没有facebook帐户,因此您不能访问该链接。您是否能够成功登录facebook?之后您是否被重定向回您的应用程序?如果是,您是否能够提供您实际被重定向到的完整url?是的,当我在本地处理该链接时,我能够使用我的facebook登录,然后根据在验证后,它只会使用res.send返回用户数据。但这对Herokouk上的部署版本不起作用,但在部署版本上,我试图确定错误实际发生的时间点。您是否能够登录facebook?或者您是否在尝试登录之前就收到了错误?如果您正在操作如果您能够登录,那么您应该被重定向到某个地方-此时可能会发生错误,如果我们在这种情况下,您是否能够告诉您被重定向到的实际url?
function originalURL(req, options) {
    var trustProxy = req.app.get('trust proxy')) ? true : false;

    var isConnectionSecure = req.connection.encrypted || (trustProxy && 'https' == req.headers['x-forwarded-proto'].split(/\s*,\s*/)[0])
    var protocol = isConnectionSecure ? 'https' : 'http'
    // ...

    return protocol + '://' + host + path;
};
app.enable('trust proxy')