node.js - 在启用 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/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);
});
推荐阅读
- icalendar - Ical 导入事件不起作用事件我的 ical 文件没有错误
- node.js - 如何使用 Nodejs API 在 DigitalOcean Bucket 中创建文件夹?
- python - 数据框查找并删除多个字段的不变值
- python-3.x - 与字典值比较(?)
- php - Paypal Recurring Profile:如何每小时运行一次?
- anypoint-studio - 如何在任意点的选择查询中设置输入参数
- python - 对象在动态类型创建期间被子类化,但不是在 python2 中的经典类定义期间
- ios - 如何在应用启动时根据用户是否登录来处理显示不同的视图控制器?
- hyperledger-fabric - 查询区块链时出现“错误:没有合适的对等方可用于初始化”
- java - 在测试运行时访问魅力报告