首页 > 解决方案 > 在启用 https 的服务器上阻止 Facebook 不安全登录

问题描述

我有一个 Node/Express 应用程序在启用了 https 的服务器上运行,但是当尝试使用 Passport Facebook 策略登录 Facebook 时,我收到此错误:

不安全登录被阻止:您无法获取访问令牌或从不安全页面登录到此应用程序。尝试将页面重新加载为 https://

我了解 Facebook 需要身份验证,但我的服务器已经有了它。证书来自 LetsEncrypt,由于我使用的是托管服务器,因此我无权访问证书文件。我的 Express 应用程序已正常初始化。

const app = express();
const cors = require("cors");
app.use(cors({ origin: true, credentials: true }));

原始请求来自我在另一台服务器上运行的前端,也来自 LetsEncrypt 的 SSL。

所以我的前端调用 Express 端点,它将它处理到 Passport:

  app.get(
    "/api/auth/facebook",
    storeRedirectToInSession,
    passport.authenticate("facebook", { scope: ["public_profile", "email"] })
  );

然后发生错误。我的研究表明,在 Express 上启用“信任代理”应该可以解决它,但它没有。如果我检查 req.secure 它总是错误的。

我真的需要访问证书文件吗?任何帮助表示赞赏。

谢谢

标签: node.jsexpresspassport.js

解决方案


未来的人们,如果没有真正访问我的 Node/Express 应用程序上的证书文件,我就无法解决这个问题。我支持创建指向letsencrypt密钥和证书文件的符号链接,然后创建了一个https express服务器,如下所示:

https
  .createServer(
    {
      key: fs.readFileSync(keys.SSL_KEY_FILE),
      cert: fs.readFileSync(keys.SSL_CERT_FILE),
    },
    app
  )
  .listen(port, function() {
    console.log("ackend server listening on port ", port);
  });

推荐阅读