0

Так я использую функцию как таковой, чтобы получить маркер доступа уже прошедшего проверку подлинности пользователя, который находится в настоящее время на моем сайте:Получение Facebook маркер доступа ВНЕ функции

var token; 
FB.getLoginStatus(
     function(response){ 
      if (response.session) { 
       alert(response.session.access_token); 
       //This correctly shows the access token. <-----GOOD 
       token = response.session.access_token; 
      } 
      else{ 
       //Other stuff. 
      } 
     } 
); 
alert(token); 
//This shows undefined. <------PROBLEM 

Единственный способ узнать токен доступа, похоже, находится в анонимной функции, вызываемой в вызове FB.getLoginStatus.

Я решил, что проблема в том, что анонимная функция внутри FB.getLoginStatus не выполняется до конца всех других скриптов на странице. Поэтому переменная «токен» не будет установлена ​​до тех пор, пока все не будет выполнено, делая ее бесполезной.

Есть ли способ извлечь токен доступа в универсально доступную переменную? Я не хочу писать весь свой код, который требует знания токена доступа в одной анонимной функции.

+0

Попробуйте 'window.token = response.session.access_token;' ... –

+0

По-прежнему нет кубиков, так как настройка переменной в значительной степени является последним. – user828835

ответ

1

Попробуйте использовать выражение FB._session.access_token, чтобы получить токен доступа из любого другого места.

+0

Спасибо, это работает. Я только изначально использовал вызов FB.getLoginStatus, потому что я не знал другого способа получить токен доступа. Нигде в документации FB я не мог найти такую ​​переменную, как та, которую вы мне дали (ужасная документация) .... где вы это нашли? – user828835

+0

Рад знать, что это помогло. Много боли и страданий и поиск через Google, чтобы найти это. – Femi

2

У вас проблема в том, что getLoginStatus является асинхронным вызовом, который соединяется с FB api. Но пока ваш скрипт продолжает работать, и поэтому предупреждение (токен); вызывается до завершения getLoginStatus(). Значит, токен еще не установлен.

Я не знаю, что вы хотите делать именно с токеном, но мой способ сделать это - вызвать функцию внутри getLoginStatus(), как только будет загружен токен, а затем продолжить функциональность, которую вы хотите. Так что ...

var token; 
FB.getLoginStatus(
     function(response){ 
      if (response.session) { 
       alert(response.session.access_token); 
       //This correctly shows the access token. <-----GOOD 
       token = response.session.access_token; 
       continueScript(); 
      } 
      else{ 
       //Other stuff. 
      } 
     } 
); 


function continueScript() { 
     .... 
     doSomeMoreFunctionalitiesWithToken(); 
     .... 
} 

function doSomeMoreFunctionalitiesWithToken() { 
     alert(token); 
} 

Вы могли бы, например, просто показать «загрузка ...» индикатор на экране и удалить его и показать реальное содержание после getLoginStatus() закончил свою задачу и, таким образом, после установлен токен.

Надеюсь, это вам поможет.

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