1

Возможно ли заставить сеанс Facebook обновить или, альтернативно, вызвать функцию «FB.init» более одного раза в документе. Я не буду вдаваться в подробности с тем, чего я пытаюсь достичь, поскольку он довольно длинный, но я работал над этим какое-то время, и это определенно кажется необходимым для этого.Заставить сеанс Facebook обновиться

У меня есть сценарий, который вызывается каждые 30 секунд, который проверяет, если пользователь facebook авторизован, это достигается просто с этим:

window.fbAsyncInit=function(){ 
    // Initialize the Facebook object 
    FB.init({ 
     appId:"123", 
     status:true, 
     cookie:true, 
     xfbml:true, 
     oauth:true 
    }); 
    // Check the Facebook session status every 30 seconds 
    setTimeout(function(){ 
     // Pass the Facebook object to the welcome function 
     fb_welcome(FB); 
    ,30000); 
}; 

В функции «fbWelcome», я тест, чтобы увидеть, если пользователь регистрируется через Facebook с помощью функции getLoginStatus. В зависимости от ответа, я затем изменяю элементы на странице. Тем не менее, есть одна ключевая вещь, которую я делаю, что все это идет не так.

Если пользователь вошел в систему Facebook, я отправляю запрос в свой API с помощью ajax, который возвращает данные Пользователя Facebook. Этот API использует PHP для связи с API Facebook. Если пользователь загрузился в Facebook при загрузке страницы, проблем не возникнет. Однако, если пользователь не был зарегистрирован на Facebook и регистрируется в Facebook на другой вкладке, пока на моем сайте, сеанс не обновляется, и детали не могут быть доступны, поскольку токены доступа и подписанный запрос недействительны. Поэтому мне нужен способ обновить токен доступа и подписанный запрос в сеансе с помощью javascript, чтобы убедиться, что они правильно читаются PHP API.

Я уверен, что снова вызвав функцию FB.init, это решит ее, поскольку она обновит сеанс. Тем не менее, я не уверен, что я намерен называть эту функцию более одного раза на страницу. Разрешено ли это? Будет ли это беспорядок вообще?

Всего несколько нот:

  1. Я знаю, что я мог бы извлечь пользователей детали с помощью Javascript SDK и FB.api, однако, я не хочу, чтобы сделать это по определенным причинам
  2. Я также знаю, что я могу передать маркер доступа и подписанный запрос на PHP API, но я также не хочу, чтобы сделать это по определенным причинам

Любая помощь очень ценится

ответ

0

Хотя я не ответил на мой вопрос, я решил его использовать одно из решений, которые я не хотел использовать. Теперь я извлекаю детали пользователей, используя API Javascript, вместо своего собственного API, поскольку я не могу получить новую сессию Facebook, чтобы перейти к PHP API.

Я попытался снова вызвать функцию init, и хотя я был в состоянии, это не имело никакого эффекта, плюс я действительно не хотел, чтобы это было решением в любом случае, поскольку мне не нужно было повторно инициализировать библиотеку Facebook, чтобы обновите сеанс.

В любом случае, я оставлю это открытым, чтобы другие могли дать свои взгляды, если они есть. Похоже, что попытка взаимодействия между PHP и Javascript SDK является реальной проблемой в некоторых случаях, количеством проблем, которые у меня были с этим ...

+0

Мне было бы очень интересно узнать, как вы это сделали; Я пытаюсь сделать то же самое, используя JS API. –

+0

@JamieDexter В конце концов мне пришлось просто использовать FB.api! Я пробовал так много разных вещей безрезультатно ... Каждый хак, который я написал, не был достаточно надежным и, в конце концов, не стоил развиваться дальше. Раздражает то, что я вынужден интегрироваться с API Facebook, который явно не готов к интеграции. Если интеграция с Facebook не является необходимостью для вашего бизнеса, держитесь подальше от него. Вы никогда не сможете гарантировать, что это сработает, даже если ваш код в порядке! –

0

Возможно, я не понимаю, что вы пытаетесь сделать. Но если вы хотите проверить серверную часть сеанса facebook, просто возьмите файл cookie facebook и сделайте свою сторону сервера auth, чтобы получить access_token. Храните этот access_token в сеансе, а затем проверяйте каждый раз, когда пользователь обращается к вашему api.Пока пользователь регистрируется в facebook, файл cookie facebook должен быть доступен, и вам просто нужно подтвердить, что access_token действителен. Если нет, извлеките новый токен. Если оба файла cookie и токен недействительны, перенаправьте пользователя на init.

+0

Спасибо за ваш ответ, но это не проблема. Доступ к стороне сервера сеанса очень прост, хотя в прошлом я столкнулся с некоторыми проблемами ... Проблема заключается в передаче сеанса с Javascript на PHP через AJAX. Хотя это нормально, он терпит неудачу после того, как сессия изменится, и это то место, где я застрял. Независимо от того, что я сделал, я не мог заставить свой API забрать новый сеанс без перезагрузки страницы. Спасибо, в любом случае :-) –

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