PHP: использование Facebook OAuth с меньшим количеством вызовов API - PullRequest
0 голосов
/ 03 апреля 2011

Моя цель - использовать Facebook Login на веб-сайте, используя как можно меньше вызовов API.Я не хочу использовать какие-либо серверные API-вызовы на сайтах, которые вообще не взаимодействуют с Facebook.Это означает, что я хочу использовать только API-вызовы для входа и публикации вещей.Однако я не хочу использовать флаг разрешений Facebook offline_access.

Вот некоторые мысли:

  • Используйте собственные сеансы для сайта вместо того, чтобы полагаться на сеансы Facebook.Таким образом, пользователь остается в системе, даже если маркер сеанса Facebook истек.В противном случае пользователь выйдет из системы, как только истечет срок действия токена, и ему нужно будет снова нажать кнопку «Войти», чтобы получить новый токен, или JS SDK Facebook автоматически войдет в систему, но это по-прежнему не идеально, поскольку пользователь увидит страницу «зарегистрировано».-out state ", и он обновится, как только JS SDK получит новый токен.Пользователям No-JS приходится снова нажимать кнопку «Вход».
  • Кэширование данных пользователя Facebook в базе данных или memcache.Используйте Facebook API Subscription для обновления базы данных.-> Нет необходимости запрашивать у API изменения в профиле пользователя Facebook.

Проблема:

  • При использовании собственных сеансов токен сеанса Facebookможет быть истек при попытке опубликовать STH.на Фейсбуке.Таким образом, вы должны прервать текущий скрипт и получить новый токен, перенаправив пользователя на Facebook или используя JS SDK.Затем продолжите сценарий.Это боль.

Моя мысль о том, как решить проблему:

  • Вместо того, чтобы публиковать вещи на Facebook с помощью PHP, вы также можете сделать это в Javascript.Если срок действия токена истек, просто получите новый, используя JS, который не требует перезагрузки страницы или перенаправления страницы в Facebook.Однако я хочу поддержать пользователей с отключенным Javascript, и тогда это невозможно.
  • По моему мнению, единственный полезный подход - это использовать собственные сеансы с кэшированными пользовательскими данными и держать людей вошедшими в систему, даже если маркер Facebookистекший.Но перенаправьте их на Facebook и обратно, как только потребуется взаимодействие с Facebook.Таким образом, пользователь не увидит страницу в «состоянии выхода из системы», Javascript не требуется, и пользователь будет перенаправлен на Facebook Login, только если это действительно необходимо.Для пользователей Javascript, Facebook JS SDK обновит токен (который затем сохраняется в cookie), и пользователь не заметит этого, так как пользователь все еще вошел в систему (используя собственную обработку сеанса).

Чтоты думаешь?Есть ли другой (лучший?) Подход к этому?Мой последний пункт кажется вполне выполнимым, но разве нет более легкого пути?Спасибо.

1 Ответ

1 голос
/ 03 апреля 2011

У меня была точно такая же проблема при создании системы аутентификации для моего сайта. Как сказал Elad Lachmi, вы можете запускать FB.login при каждой загрузке страницы, но это вызовет быструю всплывающую вспышку (становится очень раздражающим).

Мое решение фактически привело к тому, что мне пришлось использовать offline_access. Похоже, что просто нет другого способа сохранить вход в систему, если он покидает ваш сайт в течение пары часов.

Вот (потенциальный) улов:

  • Войти в систему через Facebook без доступа в автономном режиме.
  • На каждой странице используйте jQuery, чтобы записать iframe в специально сформированный URL, который использует FB.getLoginStatus, и настроить его на обновление каждые 15 минут

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

Обратите внимание, что я не пробовал это, и это может быть против Facebook ToS. Но это действительно единственное решение без использования offline_access, если вы хотите, чтобы пользователь входил в систему более 2 часов, не требуя от него обновления страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...