在启用了https的服务器上阻止了Facebook不安全的登录

时间:2018-08-27 19:25:56

标签: node.js express passport.js

我有一个启用了https的服务器上运行的Node / Express应用程序,但是尝试使用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总是错误的。

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

谢谢

1 个答案:

答案 0 :(得分:0)

未来的人们,如果不能真正访问Node / Express应用程序上的证书文件,我将无法解决此问题。我曾支持创建到letencrypt密钥和cert文件的符号链接,然后创建如下的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);
  });