2012-02-21 2 views
0

Так что я сталкиваюсь с некоторыми странными проблемами с SDK для Facebook. Я использую JS SDK как PHP SDK. Для входа пользователя из Я использую следующие OnClick:Facebook JS/PHP SDK

<a href="/logout/" onclick="FB.logout();">Log out</a> 

После того как я нажал на эту ссылку, когда я пытаюсь выполнить любой вызов JS SDK, как: FB.getAuthResponse(); он возвращает, как и ожидалось, значение null.

Но после нажатия ссылки, когда я использую PHP SDK, чтобы проверить, что кто-то вошел в систему, или просто используйте следующую функцию SDK: $ this -> facebook -> getAccessToken(); он возвращает действительный токен, как будто я все еще зарегистрирован.

Что мне здесь не хватает? Кстати, вам нужен какой-то мой PHP-код, где я проверяю логин?

Заранее благодарен!

+0

Пользователь буквально выходит из фейсбука? Я имею в виду, если вы откроете facebook.com - вы все еще вошли в систему или нет? – zerkms

+0

Да, когда я иду в Facebook, мне нужно снова войти в систему. – Diederik

+0

Является ли '$ fb-> api ('me');' in php возвращает что-то? Я прошу, потому что FB PHP SDK просто кэширует токен доступа, поэтому 'getAccessToken()' не всегда возвращает реальный рабочий токен. – zerkms

ответ

1

PHP sdk сохраняет токен доступа в локальный сеанс. Это огромная проблема. Особенно в моменты, когда токен facebook истекает, и локально SDK считает, что он все еще активен. Решение, которое мы используем, - это каждый раз, когда нам нужны данные пользователя, которые мы проверяем против токена доступа, чтобы проверить, действительно ли он действителен. Люди думали, что это должно быть нормальное поведение SDK (чтобы гарантировать активный токен), но, к сожалению, это не так. Это фрагмент кода, который мы используем.

$graph_url = "https://graph.facebook.com/me?access_token=". $access_token; 

$response = curl_get_file_contents($graph_url); 
$decoded_response = json_decode($response); 
//Check for errors 
if ($decoded_response->error) { 
    // check to see if this is an oAuth error: 
    if ($decoded_response->error->type== "OAuthException") { 
    // Retrieving a valid access token. 
    $dialog_url= "https://www.facebook.com/dialog/oauth?" 
    . "client_id=" . FB_APP_ID 
    . "&redirect_uri=" . urlencode($redirect_url) 
    . "&scope=" . implode(',', $permissions); 
    exit("<script> top.location.href='" . $dialog_url ."'</script>"); 
    } 
    else { 
    //handle other error types 
    } 
else { 
    return $facebook-getUser(); 
} 

Это часть нашей собственной функции getUser. Надеюсь, это поможет вам реализовать свои собственные :)

+0

'Решение, которое мы используем, - это каждый раз, когда нам нужны данные пользователя, которые мы проверяем с помощью токена доступа, чтобы проверить, действительно ли он действителен .' --- На самом деле там ** нет никакой разницы **, когда вы знаете о недействительном токене - по реальному полезному запросу или по запросу токена. И impementation facebook более эффективен, чем ваш, если он не требует дополнительного запроса токена каждый раз – zerkms