2012-05-08 5 views
0

Поскольку эта статья не отвечает на вопрос (How to get user access token?), я хотел спросить, как получить токен доступа пользователя.Получение токена доступа пользователя к facebook/PHP SDK 3.1.1

У меня уже есть мой токен доступа к приложениям, простой. Я также видел в последнем классе php sdk Base_facebook есть функция getUserAccesstoken, но ее бесполезно, потому что в конце вы получаете только токен доступа к приложению.

Это моя подлинность поток: пользователя получает в приложение FanPage, и в каком-то момент, он должен санкционировать разрешение:

$facebook = new Facebook(array(
    'appId' => $app_id, 
    'secret' => $secret, 
    'cookie' => true 
)); 

$user = $facebook->getUser(); 

if($user == 0) { 

    $login_url = $facebook->getLoginUrl($params = array('scope' => "publish_stream", 'redirect_uri' => "https://www.facebook.com/pages/PAGENAME/PAGE-ID?sk=app_APP-ID0&app_data=af")); 

echo ("<script> top.location.href='".$login_url."'</script>"); 
} 

Это работает, хорошо, App_Data пары «аф» установлена, чтобы получить верните страницу в приложение fanpage.

Поскольку я понимаю, что когда я удаляю приложение и возвращаюсь к странице auth, пользовательский cookie ($ user) по-прежнему установлен, и поэтому пользователь не будет запрашивать разрешения снова.

По этой причине я хотел проверить права доступа, а также, и поэтому мне нужен доступ пользователя токенов

try{ 
     $permissions = $facebook->api("/me/permissions", 'GET', array('access_token' => "$access_token")); 
    } 
    catch (Exception $e) {echo ("<script> top.location.href='".$login_url."'</script>"); } 

    if(array_key_exists('publish_stream', $permissions['data'][0])) { 
     // Permission is granted! 

    } else { 
     echo ("<script> top.location.href='".$login_url."'</script>"); 
    } 

Так что я попытался пример стороне сервера аутентификации (https://developers.facebook.com/docs/authentication/server-side/), но, конечно, это не будет работать здесь, поскольку вы не можете прочитать $ _REQUEST изнутри приложения, так что я застрял здесь. - Как вы, ребята, проверяете разрешение внутри приложения?

$app_id = "YOUR_APP_ID"; 
    $app_secret = "YOUR_APP_SECRET"; 
    $my_url = "YOUR_URL"; 

    session_start(); 
    $code = $_REQUEST["code"]; 

    if(empty($code)) { 
    $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection 
    $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
     . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state=" 
     . $_SESSION['state']; 

    echo("<script> top.location.href='" . $dialog_url . "'</script>"); 
    } 

    if($_REQUEST['state'] == $_SESSION['state']) { 
    $token_url = "https://graph.facebook.com/oauth/access_token?" 
     . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) 
     . "&client_secret=" . $app_secret . "&code=" . $code; 

    $response = file_get_contents($token_url); 
    $params = null; 
    parse_str($response, $params); 

    $graph_url = "https://graph.facebook.com/me?access_token=" 
     . $params['access_token']; 

    $user = json_decode(file_get_contents($graph_url)); 
    echo("Hello " . $user->name); 
    } 
    else { 
    echo("The state does not match. You may be a victim of CSRF."); 
    } 

ТИА & веселит, Даниель

+0

Если вы знаете, как получить токен доступа к доступу, доступ к токену доступа легко. Не могли бы вы прояснить – phwd

+3

@phwd, если это легко, можете ли вы рассказать нам, как это сделать? –

ответ

0

Смотрите секцию Facebook Developer Документов о стороне сервера аутентификации: https://developers.facebook.com/docs/authentication/server-side/

Или вы можете использовать гибридную аутентификацию клиента-сервер: http://developers.facebook.com/blog/post/534/

+0

спасибо за помощь cpilko, я обновил свою проблему, чтобы сделать ее более четко, где проблема заключается в получении токена доступа пользователя. –

Смежные вопросы