2013-03-24 2 views
1

Так что это нормально работает ... Но когда я дважды обновляю страницу (или нажимаю на двух страницах, которые включают этот скрипт быстро) он дает эту ошибку OAuthException: токен доступа должен использоваться для запроса информации о текущем пользователе. Любые идеи?Same facebook problems ... OAuthException: токен доступа должен использоваться для запроса информации о текущем пользователе.

<?php 

    $app_id = '***************'; 
    $app_secret = '**************'; 
    $app_namespace = '****************'; 

    $app_url = 'http://apps.facebook.com/' . $app_namespace . '/'; 
    $scope = 'email,publish_actions'; 

    // Init the Facebook SDK 
    $facebook = new Facebook(array(
    'appId' => $app_id, 
    'secret' => $app_secret, 
    )); 

    // Get the current user 
    $user = $facebook->getUser(); 

    // If the user has not installed the app, redirect them to the Login Dialog 

    if (!$user) { 
    $loginUrl = $facebook->getLoginUrl(array(
     'scope' => $scope, 
     'redirect_uri' => $app_url, 
    )); 

    print('<script> top.location.href=\'' . $loginUrl . '\'</script>'); 
    } 

if ($user) { 
    try { 
    // Proceed knowing you have a logged in user who's authenticated. 
    $user_profile = $facebook->api('/me', 'POST'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    $user = null; 
    } 
} 
//<img src="https://graph.facebook.com/?php echo $user; ?/picture"> 
//?php print_r($user_profile); ? 
?> 

ответ

1

Мне лично легче управлять access_token. Facebook API Graph защищает защищенные конечные точки, требуя передачи access_token. PHP SDK реферат это, но мне никогда не нравилось, когда Facebook обрабатывал информацию, потому что иногда просто не работает. Это не значит, что библиотека плохая, но только то, что Я не использовал ее правильно. Помните об этом.

Похоже, вы работаете с Facebook Canvas App. Когда пользователь успешно аутентифицируется в первый раз, Facebook отправит access_token в $_GET. На данный момент вы должны сохранить это в вашей базе данных, так как этот токен доступа хорош в течение 3 месяцев или около того.

В точке, с тех пор, вы можете передать в access_token в параметрах вызова:

try { 
    $user_profile = $facebook->api('/me', 'POST', array(
     "access_token" => '' // access token goes here 
    )); 
} catch (FacebookApiException $e) { 
    // error handling 
} 

Учитывая, что Facebook возвращает ошибку, что вам нужно маркер доступа для вызова на /me ресурс , похоже, что $facebook->getUser(); что-то возвращает. Возможно, вы захотите дважды проверить, что это такое.


Пока я здесь, вы используете эту логику:

if (!conditional) { 
    // do something 
} 
if (conditional) { 
    // do something else 
} 

Смешение. Использовать else:

if (conditional) { 
    // do something 
} else { 
    // do something else 
} 
Смежные вопросы

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