1

Итак, я использую кнопку входа в FB, чтобы пользователи могли войти в систему. После нажатия кнопки входа FB пользователь перенаправляется в файл с именем fb_redirect.php, чтобы php мог начать сеанс.Facebook API не получает токена доступа

window.fbAsyncInit = function() 
{ 
    FB.init({ 
     appId: '12345', 
     status: true, 
     cookie: true, 
     xfbml: true 
    }); 
    FB.Event.subscribe('auth.login', function(response) 
    { 
     window.location = '/fb_redirect.php'; 
    }); 
}; 

В файле fb_redirect я следующее:

session_start(); 
require("model/facebook_api/src/facebook.php"); 

$facebook = new Facebook(array(
    'appId' => '12345', 
    'secret' => '12345' 
)); 

$access_token = $facebook->getAccessToken(); 
$facebook->setAccessToken($access_token); 

if($access_token != "") 
{ 
    $user = $facebook->getUser(); 

    if($user != 0) 
    { 
     $user_profile = $facebook->api("/".$user); 
     $fb_id = $user_profile['id']; 
     $fb_first_name = $user_profile['first_name']; 
     $fb_last_name = $user_profile['last_name']; 
     $fb_email = $user_profile['email']; 

     $_SESSION['login'] = "true"; 
    } 
} 

header("Location:index.php"); 

Что произойдет в файле рода запутанным. Это действительно поразило или пропустило. Если я уже зарегистрирован в FB, а затем попытаюсь войти на мой сайт с помощью кнопки входа в FB, появится экран, а затем быстро исчезнет. Но он не регистрирует меня на моем сайте.

Если я не зарегистрирован в FB и не попытаюсь войти в мой сайт, появится экран и предложит мне войти в FB. Когда я успешно вхожу в FB на всплывающем экране, происходит перенаправление. Но когда это произойдет, я либо получаю сообщение об ошибке, сообщающее мне, что мне нужен действительный токен доступа. В других случаях он просто перенаправляется на домашнюю страницу без установки сеанса. Итак, я предполагаю, что токен доступа даже не был установлен.

Я где-то читал, что вы можете вручную установить токен доступа. Итак, я пробовал:

$facebook->setAccessToken($access_token); 

Но это не сработало.

Я не знаю, как это понять. Есть идеи?

ответ

1

не знаю, помогает ли это (потому что, давайте посмотрим правде в глаза, FB SDK довольно универсален), но рекомендации FB скорее всего вы получите пользователя, прежде чем вы получите токен доступа; возможно (просто теория), когда вы уже вошли в систему, токен доступа недоступен вашему объекту $ facebook до тех пор, пока вы не выполните метод getUser() ... кажется разумным, я думаю, чтобы получить пользователя до его доступа маркер.