Facebook 登录按钮(在 LOCALHOST 上。):登录按钮插件不再适用于 http 页面

Posted

技术标签:

【中文标题】Facebook 登录按钮(在 LOCALHOST 上。):登录按钮插件不再适用于 http 页面【英文标题】:Facebook Login Button (ON LOCALHOST.) : The Login Button plugin no longer works on http pages 【发布时间】:2020-03-26 21:27:29 【问题描述】:

好的,所以我有这个需要访问 FB api 才能发布内容的应用程序......事情是,我当然是在 localhost 上尝试我的应用程序。 (php5.6内部服务器)

我不断收到错误:

The Login Button plugin no longer works on http pages. Please update your site to use https for Facebook Login.

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

尽管人们一直说 localhost 不需要 https,只要应用程序处于开发状态,它就是。

我以为可能是因为我在端口 8000 上运行 php 服务器,但我使用php5.6 -S localhost:80 进行检查以防万一,结果实际上是一样的。

代码是:

<div id="fb-root"></div>
<div class="fb-login-button" data- data-size="large" data-button-type="continue_with" data-auto-logout-link="false" data-use-continue-as="true"></div>


<script>
  function statusChangeCallback(response)   // Called with the results from FB.getLoginStatus().
    console.log('statusChangeCallback');
    console.log(response);                   // The current login status of the person.
    if (response.status === 'connected')    // Logged into your webpage and Facebook.
      testAPI();
     else                                  // Not logged into your webpage or we are unable to tell.
      document.getElementById('status').innerhtml = 'Please log ' +
        'into this webpage.';
    
  


  function checkLoginState()                // Called when a person is finished with the Login Button.
    FB.getLoginStatus(function(response)    // See the onlogin handler
      statusChangeCallback(response);
    );
  


  window.fbAsyncInit = function() 
    FB.init(
      appId      : '[totally valid id belonging to my development app I quadruple checked.]',
      cookie     : true,                     // Enable cookies to allow the server to access the session.
      xfbml      : true,                     // Parse social plugins on this webpage.
      version    : 'v5.0'           // Use this Graph API version for this call.
    );


    FB.getLoginStatus(function(response)    // Called after the JS SDK has been initialized.
      statusChangeCallback(response);        // Returns the login status.
    );
  ;


  (function(d, s, id)                       // Load the SDK asynchronously
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "https://connect.facebook.net/en_US/sdk.js";
    fjs.parentNode.insertBefore(js, fjs);
  (document, 'script', 'facebook-jssdk'));


  function testAPI()                       // Testing Graph API after login.  See statusChangeCallback() for when this call is made.
    console.log('Welcome!  Fetching your information.... ');
    FB.api('/me', function(response) 
      console.log('Successful login for: ' + response.name);
      document.getElementById('status').innerHTML =
        'Thanks for logging in, ' + response.name + '!';
    );
  
</script>


<div id="status">
</div>

请帮帮我。我真的必须为此设置一个带有 https 等的服务器吗?

【问题讨论】:

不确定它如何与 php 一起使用,但使用 node.js,您可以使用名为“devcert”的工具在 localhost 上拥有 https。我相信php也有一些东西。顺便说一句,php 5.x 已经过时了,你真的应该更新到 7.x 了。 我做不到。我的客户不愿意支付我太多宝贵的时间。顺便说一句,感谢您的提示,我刚开始使用 apache + mkcert 证书。有点烂,是不必要的复杂......但我终于能够继续前进。谢谢你。发表回应,我会接受的。 【参考方案1】:

以下更改对我有用,没有任何问题

更改本地主机 URL 'localhost/yoursitename' 到 'https://localhost/yoursitename'

【讨论】:

【参考方案2】:

使用 node.js,您可以使用名为“devcert”的工具在 localhost 上使用 https。

对于 PHP:

How do I allow HTTPS for Apache on localhost? Localhost server with php and ssl https://linoxide.com/linux-how-to/mkcert-localhost-ssl-certificates-linux/

【讨论】:

以上是关于Facebook 登录按钮(在 LOCALHOST 上。):登录按钮插件不再适用于 http 页面的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 localhost 测试 Facebook 登录

使用 localhost 进行 facebook 身份验证 laravel 5.1 时的应用程序域

Facebook 应用程序:Firebase 简单登录 URL 错误

知道何时在 ios 中按下 facebook 登录按钮

在 localhost PHP 中使用 Facebook 评论

Facebook 登录按钮导致崩溃