无法再从 http 页面调用方法 FB.getLoginStatus

The method FB.getLoginStatus can no longer be called from http pages

所以我尝试在我的 nodejs 后端服务器中实现 Facebook 登录功能。出于测试目的,我正在尝试客户端检查登录并获取访问令牌。为此,我按照文档进行操作,它说要使用 Javascript SDK 并且我按照程序进行操作,但是有一个问题。

window.fbAsyncInit = function() {
    FB.init({
      appId            : '##############',
      autoLogAppEvents : true,
      xfbml            : true,
      version          : 'v4.0'
    })


    FB.getLoginStatus(function(response) {
        statusChangeCallback(response);
    });

  }

这是我想要获取用户登录状态的代码,但我收到一条错误消息:

The method FB.getLoginStatus can no longer be called from http pages

我非常了解生产规则,但这是我正在使用的开发模式,但仍然出现错误。我有什么想念的吗?有什么我必须做的吗?我在本地主机上 运行 它并收到错误。

您需要在您的服务器(即本地主机)上部署一个 SSL 证书。它将拒绝来自不安全位置的任何内容。

为了解决这个问题 "The method FB.getLoginStatus can no longer be called from http pages" 我使用了应用程序 https://ngrok.com/

它通过隧道或类似的方式在我的本地服务器上的浏览器中生成 https

Windows 10 +wsl(Debian)

  1. 下载 ngrok

  2. 解压到文件夹

  3. 运行 命令并使用 ngrok

  4. 导航到文件夹
  5. 现在你可以 运行 :"ngrok http:80" <-假设你有 apache2 服务工作

  6. 我的项目在 DocumentRoot 的 different/sub 文件夹中,我还需要这样做:

如果使用 create-react-app,有一个更简单的修复方法:将环境变量 HTTPS 设置为 true。在 package.json:

中更改您的启动脚本
"scripts": {
  "start": "HTTPS=true react-scripts start",
  ...
}

如果已经在使用自定义脚本,您也可以将其添加到此处:

process.env.HTTPS = true;

后一种方式的主要优点是可以加评论说明。

有关 CRA 中配置的更多信息:https://create-react-app.dev/docs/advanced-configuration

在 package.json 中,我刚刚使用了这个:

"serve": "vue-cli-service serve  --https true",

而不是:

"serve": "vue-cli-service serve",

而且效果很好。