成功授权后,Facebook SDK getUser()方法返回0

时间:2014-01-04 11:27:47

标签: php facebook facebook-graph-api

我最近改变了我的主机并注意到Facebook登录不再有效。它不会抛出任何错误,但它根本不起作用。

我的代码: Tested with the given example

我的工作流程:

  1. 用户点击登录按钮(getLoginUrl()方法)。
  2. 弹出Facebook授权窗口
  3. 用户接受并通过?code = ..& state = ..
  4. 重定向回我的页面
  5. getUser()返回0,但应返回用户ID
  6. 我试着用谷歌搜索答案。这就是我试过的:

    1. 更改getCode()方法 - > _REQUEST问题
    2. 打开/关闭Cookie
    3. 我还能做些什么来解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

尝试以下操作,在您正在进行身份验证的页面下添加JS代码

<div id="fb-root"></div>

<script type="text/javascript">
    window.fbAsyncInit = function()
            {
                FB.init
                ({
                    appId   : 'your fb app id',
                    status  : true, // check login status
                    cookie  : true, // enable cookies to allow the server to access the session
                    xfbml   : true, // parse XFBML
                    oauth   : true
                });
                FB.Event.subscribe('auth.login', function()
                {
                    window.location.reload();
                });
            };

          (function()
          {
            var e = document.createElement('script');
            e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
            e.async = true;
            document.getElementById('fb-root').appendChild(e);
            }());
</script>

确保在HTML中添加id =“fb-root”的div并关闭,最佳做法是将其添加到JS代码上方。

然后使用PHP脚本生成登录按钮并在页面顶部添加以下代码,以便在页面重新加载时执行代码

require_once 'src/facebook.php'; //include the facebook php sdk
$facebook = new Facebook(array(
    'appId'  => 'XXXXXXXXXXXXXX',    //app id
    'secret' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX', // app secret
));

$user_id = $facebook->getUser();