Не работает аутентификация Facebook

Автор: Eugeniy Marilev
Дата публикации: 2014-05-06 10:33:35

Счастливым разработчикам, которым приходилось работать с такой платформой как Facebook посвящается... Facebook использует аутентификацию oAuth2.0. Любой желающий может зарегистрировать веб или мобильное приложение внутри системы. Аутентификация пользователей выполняется по схеме описанной в документации Facebook. Далее я расскажу об самых распространенных ошибках связанных с аутентификацией к данной платформе.

Facebook Auth параметр "base_domain"

Мое приложение работало через эту самую схему. Для реализации серверной части аутентификации на моем сайте использовалась Facebook PHP SDK 3.0. Все отлично работало, пока в один прекрасный момент она не навернулась, причем никаких изменений при этом на production-версии не выполнялись. После нескольких часов разбирательства — выяснилось, что разработчики Facebook API, никого не предупредив, добавили определенный, видимо им необходимый, функционал в механизм аутентификации. Известно, что есть параметр, используемый при аутентификации как промежуточное звено - «redirect_url». Одним из обязательных условий цепочки авторизации — параметр redirect_url не должен изменяться, иначе аутентификация не пройдет. Происходит это потому, что Facebook отдает параметр «code», в который есть зашифрованные определенным алгоритмом параметры, включая «redirect_url». Рассмотрим исходные файлы Facebook PHP SDK. Файл base_facebook.php:

  /**
   * List of query parameters that get automatically dropped when rebuilding
   * the current URL.
   */
   protected static $DROP_QUERY_PARAMS = array(
      'code',
      'state',
      'signed_request'
   );

В процессе аутентификации SDK добавляет к адресу переадресации «redirect_url». Параметр «redirect_url» формируется функцией getCurrentUrl(), которая при формировании URL игнорирует перечисленные в примере кода выше параметры. Так вот причина скрывалась в том, что разработчики добавили еще один параметр в процесс аутентификации. Да, этот самый злополучный параметр «base_domain». Лечим быстро проблему:

  /**
   * List of query parameters that get automatically dropped when rebuilding
   * the current URL.
   */
   protected static $DROP_QUERY_PARAMS = array(
      'code',
      'state',
      'signed_request',
      'base_domain'
   );

Не работает аутентификация в Internet Explorer

Если в качестве движка аутентификации использовать Facebook Javascript SDK, то минимальная ширина страницы сайта мгновенно выставляется в значение 575px. Не верите — видимо вы не разрабатывали мобильные версии сайтов. Подробнее как правильно убрать ограничение ширины смотрите здесь. Так вот пользователи пытаясь побороть это ограничение начитают изменять стилизацию блока:


Прошу вас не делайте этого. Не изменяйте ему ширину с помощью css, js, а тем более не делайте его невидимым. Именно из-за того начинаются проблемы аутентификации в Internet Explorer. Симптомы следующие — после открытия формы авторизации и ввода авторизационных данных — выскакивает javascript ошибка и аутентификация прерывается. Данная ошибка. По сути не имеет отношения к IE, проблема в том, что в других браузерах она пропускается.

Комментарии к статье
Комментарии:
Нет результатов.
Только зарегистрированые пользователи могут оставлять комментарии