我有一个启用了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总是错误的。
我真的需要访问证书文件吗? 任何帮助表示赞赏。
谢谢
答案 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);
});