Facebook access_token: как я могу получить его, когда пользователь примет мое приложение? - PullRequest
5 голосов
/ 30 апреля 2010

Когда пользователь посещает мой сайт, на котором в первый раз содержится приложение facebook, он требует от него разрешения, и ему предлагается сделать это, а затем я получаю код, который могу преобразовать в access_token. Пока все хорошо.

Но как получить токен, когда пользователь уже посетил сайт? Пока этот токен в первый раз активен, все в порядке. Но как получить еще один токен, если пользователь уже разрешил приложение неделю назад и снова только посещает мою страницу?

Ответы [ 5 ]

4 голосов
/ 31 августа 2011

Теперь, когда Facebook мигрирует на Oauth2, файл cookie, созданный Javascript, отличается. Я заставил его работать на меня и добавил его в форк плагина FGraph для Rails - https://github.com/imme5150/fgraph

Одним из приемов является то, что когда вы запрашиваете access_token из параметра «code», хранящегося в cookie, вы должны передать «redirect_uri», но вы хотите, чтобы он был пустым.

3 голосов
/ 31 августа 2011

В потоке на стороне клиента вы можете перенаправить пользователя в диалоговое окно OAuth с разрешениями в параметре scope. Если пользователь уже принял ваше приложение и разрешения, он будет перенаправлен на ваш «redirect_uri» с access_token во фрагменте URI, в противном случае необходимые разрешения будут отображаться.

https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=email,read_stream&response_type=token

В потоке на стороне сервера у вас должен быть «код», чтобы вы могли использовать его для access_token на конечной точке OAuth:

https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&redirect_uri=YOUR_URLclient_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE

Документация: https://developers.facebook.com/docs/authentication/

0 голосов
/ 02 июля 2012

Вы также можете использовать это:

$access_token = $facebook->getAccessToken();

https://developers.facebook.com/docs/reference/php/facebook-getAccessToken/

0 голосов
/ 10 мая 2010

используя php

session_start();
// Create our Application instance.
$facebook = new Facebook(array(
                'appId' => FACEBOOK_APP_ID,
                'secret' => FACEBOOK_APP_SECRET,
                'cookie' => true,
                'domain' => 'example.com'

));

$session = $facebook->getSession();

$me = null;
// Session based API call.
if ($session) {
    try {
        $uid = $facebook->getUser();
        $me = $facebook->api('/me');
        $_SESSION['me'] = $me;
        $_SESSION['uid'] = $uid;
        $_SESSION['session'] = $session;

    } catch (FacebookApiException $e) {
        error_log($e);
    }
}

вы можете ссылаться на access_token через $ _SESSION ['session'] ['access_token'] в вашем приложении, чтобы получить дополнительные руководства на fbdevtutorials.com

0 голосов
/ 30 апреля 2010

Я использую метод cookie для хранения маркера access_token на компьютере пользователя.

FB.init({appId: 'your app id', status: true, cookie: true, xfbml: true});

В вашем файле facebook.php вам нужно установить для cookieSupport значение true, тогда:

private $cookieSupport = true;

Или используйте функцию get_facebook_cookie, найденную здесь: Единый вход с помощью JavaScript SDK

Затем access_token сохраняется в файле cookie с именем "fbs_APPID" ( с истечением ). Если вы хотите, чтобы файл cookie длился более двух часов, вам нужно запросить расширенное разрешение «offline_access»:

Позволяет вашему приложению выполнять авторизованные запросы от имени пользователя в любое время. По умолчанию срок действия большинства маркеров доступа истекает через короткий промежуток времени, чтобы приложения выполняли запросы от имени пользователя только тогда, когда оно активно использует приложение. Это разрешение делает маркер доступа, возвращенный нашей конечной точкой OAuth, долгоживущим.

...