Facebook Graph API - одинаковый токен доступа для всех пользователей - PullRequest
0 голосов
/ 20 июня 2011

Я безумно давно пытаюсь получить токен доступа для моих пользователей. Я читал на многих сайтах, чтобы получить его каким-то образом, используя 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 ]

3 голосов
/ 20 июня 2011

Проблема в том, что вы запрашиваете type=client_cred, который сообщает Facebook, что вы не хотите токен доступа для пользователя, но токен доступа для приложения. Это используется для таких вещей, как доступ к аналитическим данным, API обновлений в реальном времени и общедоступные данные. Если вы хотите получить пользовательские данные, вы не должны передавать этот флаг.

Если вы действительно хотите развернуть свой собственный доступ к Graph API, вы, безусловно, можете это сделать, следуя инструкциям на https://developers.facebook.com/docs/authentication/.

0 голосов
/ 20 июня 2011

Вы говорите, что используете 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());
    }

Пример, в значительной степени перефразированный из SDK Facebook Github .

...