Принудительно обновить сеанс Facebook - PullRequest
1 голос
/ 18 марта 2012

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

У меня естьскрипт, который вызывается каждые 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, но я также не хочу делать это по определенным причинам

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

Ответы [ 2 ]

0 голосов
/ 19 марта 2012

Может быть, я не понимаю, что вы пытаетесь сделать. Но если вы хотите проверить сеанс Facebook на сервере, просто захватите cookie-файл Facebook и выполните аутентификацию на стороне сервера, чтобы получить access_token. Сохраните этот access_token в сеансе, а затем проверяйте каждый раз, когда пользователь обращается к вашему API. Пока пользователь вошел в facebook, cookie-файл facebook должен быть доступен, и вам просто нужно подтвердить, что access_token действителен. Если нет, получите новый токен. Если и файл cookie, и токен недействительны, перенаправьте пользователя в init.

0 голосов
/ 18 марта 2012

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

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

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

...