Facebook Graph API - 所有用户的相同访问令牌

时间:2011-06-20 18:54:36

标签: facebook facebook-graph-api access-token

我一直疯狂地试图为我的用户获取访问令牌。我在许多网站上阅读,以某种方式通过使用getSession()并从中获取access_token ...它给了我未定义的函数错误..我也搜索了所有解决方案说使用更新的SDK,但我的更新,它仍然将无法工作...所以我终于得到另一个获得访问令牌的解决方案,但这似乎是为所有用户提供相同的访问令牌...任何想法问题在哪里?所有用户肯定不能拥有相同的令牌吗?

$app_id          = $facebook->getAppId();
            $app_secret      = $facebook->getApiSecret();

            function callFb($url, $params)
            {
                $ch = curl_init();
                curl_setopt_array($ch, array(
                    CURLOPT_URL => $url,
                    CURLOPT_POSTFIELDS => http_build_query($params),
                    CURLOPT_RETURNTRANSFER => true,
                    CURLOPT_VERBOSE => true
                ));

                $result = curl_exec($ch);
                curl_close($ch);
                return $result;
            }

            $params=array('client_id'=>$app_id, 'type'=>'client_cred', 'client_secret'=>$app_secret);
            $url = "https://graph.facebook.com/oauth/access_token";
            $access_token = callFb($url, $params);
            $access_token = substr($access_token, strpos($access_token, "=")+1, strlen($access_token));     

2 个答案:

答案 0 :(得分:3)

问题在于您要求type=client_cred,它告诉Facebook您不想要用户的访问令牌,而是该应用的访问令牌。这用于访问洞察,实时更新API和公共数据等操作。如果要获取用户数据,则不应传递该标志。

如果你确实想要推出自己对Graph API的访问权限,那么你可以按照https://developers.facebook.com/docs/authentication/上的说明进行操作。

答案 1 :(得分:0)

你说你正在使用PHP SDK,但我没有在你的代码中看到任何提及它。

正确的方法是:

<?php

    require('facebook.php');

    $fb = new Facebook(array('appId' => APP_ID, 'secret' => SECRET));

    $user = $fb->getUser();

    // if we have a valid user, we're logged in
    if ($user)
    {
        // do stuff with the API using the $fb object
    }
    else
    {
        // redirect the user to the authentication page
        header("Location: ".$fb->getLoginUrl());
    }

示例主要从Facebook's SDK Github转述。