facebook OAuthException:必须使用活动访问令牌来查询有关当前用户的信息

Sub*_*hra 2 php codeigniter facebook-php-sdk

facebook Uncaught OAuthException的可能重复:必须使用活动访问令牌来查询有关当前用户的信息

但我没有得到适当的解决方案.

我使用facebook sdk与codeigniter它正常工作.但有时会抛出异常OAuthException:必须使用活动访问令牌来查询有关当前用户的信息.

这是Controller文件的代码

$config = array(
                    'appId'  => 'XXXXXXX',
                    'secret' => 'XXXXXXXXXXXXXXXXXXXXXXXXXX',
                    'fileUpload' => true,
              );

$this->load->library('facebook/Facebook', $config);

$fbme = null;

$user = $this->facebook->getUser();

if ($user) {
    try {               
        $fbme = $this->facebook->api('/me');
    } catch (FacebookApiException $e) {
          error_log($e);
          $user = null;
    }
}

//if user is logged in and session is valid.
if ($fbme){
              //do some stuff...
              //redirecting to user home page (my site's)
    }
Run Code Online (Sandbox Code Playgroud)

在视图文件中,我使用的是js sdk.视图文件的代码是

<div id="fb-root"></div>
    <script type="text/javascript">
        var button2;

        window.fbAsyncInit = function() {
            FB.init({ appId: 'XXXXXXXX',
                status: true,
                cookie: true,
                xfbml: true,
                oauth: true});

           function updateButton(response) {
                button1 = document.getElementById('fb-login'); //login button
                button2 = document.getElementById('fb-logout'); //logout button
                if (response.authResponse) {
                    //user is already logged in and connected
                                button2.onclick = function() {
                                    FB.logout(function(response) {});
                                };
            } else {
                    //user is not connected to your app or logged out
                    button1.onclick = function() {
                        FB.login(function(response) {
                            if (response.authResponse) {
                            } else {
                                //user cancelled login or did not grant authorization
                            }
                        }, {scope:'email,user_birthday,user_about_me,user_likes,user_interests,user_education_history,user_work_history'});
                    }
                }
            }

            // run once with current status and whenever the status changes
            FB.getLoginStatus(updateButton);
            FB.Event.subscribe('auth.login', function(response) {
                window.location.reload();
            });
            FB.Event.subscribe('auth.logout', function(response) {
                window.location.reload();
            });
        };
        (function() {
            var e = document.createElement('script'); e.async = true;
            e.src = document.location.protocol
                + '//connect.facebook.net/en_US/all.js';
            document.getElementById('fb-root').appendChild(e);
        }());       
    </script>
Run Code Online (Sandbox Code Playgroud)

问题:

有时,它会抛出"OAuthException:必须使用活动访问令牌来查询有关当前用户的信息." 到错误日志文件.

案例:用户登录Facebook和已验证我的应用程序 如果用户登录Facebook和验证我的应用程序,并试图在其登录到我的网站,而不是将用户重定向到我的网站(PHP SDK是不是在这种情况下工作) ,它正在加载视图文件.在视图文件中,我也在检查用户是否登录了facebook.(在视图中)如果用户登录将重新加载页面,将运行相同的控制器脚本,并将用户重定向到用户的主页(在这种情况下,php sdk正在工作.).

但第一次它不起作用.不知道我在哪里弄错了.

此注销按钮(在视图文件中)有时也无法正常工作.单击它的方法不是从Facebook注销用户.(它只发生在我同事的一个浏览器中.她在Windows 7中使用chrome)

Wil*_*rro 5

我在使用PHP-SDK + JS-SDK时遇到了类似的问题.我通过删除FB.init "cookie:true"选项暂时解决了这个问题.

由于某些原因我无法找到,PHP和JS之间正在共享一个无效的signedRequest cookie,然后,PHP Session的有效access_token被覆盖了无效的access_token,从而破坏了之前有效的PHP令牌.

我和你的问题之间的区别在于你是通过JS登录并尝试在PHP上访问相同的会话(我正在向后执行,登录PHP并尝试使用JS-SDK).

这个错误显然是在这个拉取请求上修复的:https: //github.com/facebook/facebook-php-sdk/pull/48