Facebook API无法获取访问令牌

时间:2013-03-20 04:35:59

标签: facebook facebook-javascript-sdk facebook-php-sdk facebook-authentication

所以,我正在使用FB登录按钮让用户登录。单击FB登录按钮后,用户将被重定向到名为fb_redirect.php的文件,以便php可以启动会话。

window.fbAsyncInit = function() 
{
    FB.init({
        appId: '12345', 
        status: true, 
        cookie: true, 
        xfbml: true
    });
    FB.Event.subscribe('auth.login', function(response) 
    {
        window.location = '/fb_redirect.php';
    });
};

在fb_redirect文件中,我有以下内容:

session_start();
require("model/facebook_api/src/facebook.php");

$facebook = new Facebook(array(
    'appId' => '12345',
    'secret' => '12345'
));

$access_token = $facebook->getAccessToken();
$facebook->setAccessToken($access_token);

if($access_token != "") 
{
    $user = $facebook->getUser();

    if($user != 0)
    {
        $user_profile = $facebook->api("/".$user);  
        $fb_id = $user_profile['id'];
        $fb_first_name = $user_profile['first_name'];
        $fb_last_name = $user_profile['last_name'];
        $fb_email = $user_profile['email'];

        $_SESSION['login'] = "true";
    }
}

header("Location:index.php");

文件中发生的事情令人困惑。这真的很受欢迎。如果我已经登录到FB,然后尝试使用FB登录按钮登录我的站点,则会弹出一个屏幕然后快速消失。但是,它不会将我登录到我的网站。

如果我没有登录FB并尝试登录我的网站,会弹出一个屏幕并提示我登录FB。当我在弹出屏幕中成功登录FB时,会发生重定向。但是,当它发生时,我会收到一条错误消息,告诉我需要一个有效的访问令牌。其他时候,它只是重定向到主页而不设置会话。所以,我猜测甚至根本没有设置访问令牌。

我在某处读到可能需要手动设置访问令牌。所以,我试过了:

$facebook->setAccessToken($access_token);

但是,这没效果。

我不知道如何理解这一点。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

不知道它是否有帮助(因为,让我们面对它,FB SDK是非常通用的),但FB指南宁愿你在获得访问令牌之前得到用户;也许(只是一个理论),当你已经登录时,你的$ facebook对象无法使用访问令牌,直到你执行getUser()方法...我猜,似乎有理由在获得用户之前获取用户令牌。