Уважаемые посетители!
Информация в этой статье устарела и является неактуальной.
Ознакомьтесь с обновленной статьей об авторизации на сайте через Facebook (PHP SDK v4)
Шаг первый: установка
Создаем Базу данных.
Давайте начнем с создания таблицы в БД:
SQL
Мы создаем таблицу для хранения информации о пользователях, которая включает следующие поля: ИД, логин пользователя, имя и фамилия пользователя, URI аватара пользователя и дату регистрации. Также нужно добавить еще пару полей: oauth_provider
и oauth_uid
, чтобы хранить в них идентификаторы различных соцсетей. Допустим, что на следующей неделе, вы решите, что неплохо было бы организовать авторизацию через Twitter. Легко: вы просто внесете в поле oauth_provider
данные об этом и таким образом оградите себя от дублирования значений в поле oauth_uid
– используя при выборке значения обоих полей: oauth_provider
и oauth_uid
.
Создаем приложение в Facebook.
Давайте создадим новое приложение в Facebook. Придумайте название приложения и согласитесь с условиями и соглашениями. Затем, сохраните API ключ и секретный ключ вашего приложения. Эти ключи расположены в секции с основными настройками приложения.
Далее заполните поля Canvas URL и Post-Authorize Redirect URL. Например, значением полей может быть следующий URL – http://localhost.com/login-facebook.php? Обратите внимание на знак вопроса в конце URL, его обязательно нужно указывать в обоих полях. Чтобы локальный хост открывался при запросе адреса http://localhost.com, нужно отредактировать файл hosts.
В полях раздела «Соединение», заполните поле Connect URL – его значение должно быть таким же, как в уже заполненных полях, а в поле Base Domain нужно указать localhost.com.
После сохранения настроек приложения, нужно скачать библиотеку PHP SDK и распаковать файл facebook.php из архива в новую директорию в корневой папке сайта.
Шаг второй: авторизация
Процесс авторизации состоит из 3 шагов:
- Скрипт на вашем сервере генерирует url для авторизации на facebook.com, направляет туда пользователя и запрашивает права на доступ к его профилю
- Facebook возвращает Canvas url в виде параметра в адресной строке
- Процесс авторизации завершается сохранением авторизованного состояния в сессии
Давайте сделаем небольшую проверку перед регистрацией и авторизацией на нашем сайте.
PHP
Сохраним этот код в файле с именем login_facebook.php в корневой папке сайта и откроем его в браузере. Если все сделано правильно, то вы будете перенаправлены на facebook.com и увидите форму для запроса прав доступа приложения к вашему профилю.
Этого могло не произойти по ряду причин: первый вариант развития событий – вы были перенаправлены на facebook.com, но увидели страницу с ошибкой. Решение может быть следующее: попробуйте проверить данные в настройках приложения – все ли поля заполнены. Второй вариант развития событий: вы увидели ошибку примерно следующего содержания: «Uncaught CurlException: 60: SSL certificate problem, verify that the CA cert is OK.». Вероятно, это произошло из-за неверных настроек CURL. Чтобы исправить эту проблему откройте файл base_facebook.php из библиотеки PHP SDK и найдите в нем метод makeRequest()
.
В нем, сразу после строки:
PHP
Добавьте следующую строку:
PHP
Это, конечно, неверный подход: добавлять свой код в файлы библиотеки, но другого способа решения этой проблемы нет.
Давайте продолжим с регистрацией пользователя: я разместил код примера внутри блока try/catch
– сделано это для предотвращения возникновения ошибки, в случае устаревших значений ключей в текущем URL.
Шаг третий: регистрация и авторизация
Сейчас будем проводить операции с базой данных. Обратите внимание, что я не буду осуществлять обработку данных перед сохранением в БД, для того, чтобы сократить объем кода в примерах. Пожалуйста, имейте это в виду и обязательно проводите обработку данных, поступивших от пользователя, перед сохранением в БД.
Создаем подключение к базе данных:
PHP
Считаем, что в нашем примере сессия активна.
PHP
Обратите внимание, что я произвожу поиск пользователей из Facebook, опираясь на данные из поля oauth_provider
. Заполняя это поле при добавлении любой записи, вы сможете сохранять данные об OAuth авторизации из разных источников (таких как twitter, Google Accounts, Open ID и тп), а в поле oauth_uid
– будут храниться идентификаторы пользователей.
Хорошим решением при создании таблицы в БД будет присвоить полю oauth_provider
тип ENUM.
Сейчас в переменной $result
– находится массив с данными, полученными из БД. Давайте сохраним некоторые из них в сессии. Добавьте следующий код первой строкой вашего скрипта:
PHP
После условного блока с проверкой if(empty($result))
добавьте следующий код:
PHP
Чтобы не отправлять уже авторизованных пользователей для повторной авторизации после строки session_start();
добавим следующее:
PHP
В скриптах, где необходима авторизация, нужно добавить следующий код:
PHP
Для отображения имени пользователя добавляем в скрипт следующие строки:
PHP
Шаг четвертый: используем дополнительные возможности
После получения прав доступа к профилю, приложение имеет массу возможностей для взаимодействия с профилем, я же обращу ваше внимание на 4 самых полезных:
FQL или Graph API
По моему мнению, FQL – более гибкий, чем Graph API и с ним проще работать. К счастью, Facebook все еще позволяет разработчикам использовать его, несмотря на то, что в новой библиотеке есть небольшие изменения.
Если вы хотите получить следующие данные о пользователе: имя, фамилию, аватар, фото пользователя и данные о поле, то можете использовать метод users.getInfo
PHP
Узнать обо всех полях, поддерживаемых методом users.getInfo()
Тот же самый результат можно получить используя FQL:
PHP
На этой странице представлен полный список таблиц, доступ к которым возможен с помощью FQL, а также доступные поля с данными о пользователе.
Расширенные права
После авторизации Facebook обеспечивает приложению взаимодействие с некоторыми данными пользователя. Ранее, в предыдущей версии API, авторизация с предоставлением расширенных прав была доступна только в Javascript SDK. На данный момент мы с легкостью сможем перенаправить пользователя на страницу Facebook для предоставления приложению расширенных прав и вернуть его обратно на наш сайт в случае предоставления прав или в противном случае.
В приведенном ниже примере, мы предложим пользователю в процессе авторизации предоставить приложению доступ к данным, таким как: электронная почта, дата рождения, а также к фотоальбомам и видеороликам.
PHP
Вы можете ознакомиться с полным списком прав. Обратите внимание, что возможно указать 2 url для возврата обратно на ваш сайт: один - в случае если пользователь предоставит приложению необходимые права, а другой – в обратном случае. Для этого используйте ключи массива next
и cansel_url
соответственно.
PHP
Если ничего не указывать, то пользователь будет направлен на страницу, адрес которой указан по умолчанию.
Проверка наличия у приложения расширенных прав.
В любой момент пользователь может отключить расширенные права у приложения. Поэтому приложение должно проверят наличие необходимых прав перед тем как проводить какие-либо действия, особенно если действия связаны с публикацией чего-либо. Для проверки будем использовать REST API.
PHP
На данный момент REST API считается устаревшим, поэтому метод users.hasAppPermission
поддерживает проверку неполного списка прав.
Публикуем сообщение на «стене» пользователя.
Давайте разместим какую-нибудь запись на «стене» пользователя, предварительно проверим наличие у приложения прав для публикации (publish_stream).
PHP
По сути, мы сделали вызов API /<ID пользователя>/feed методом POST (второй параметр метода facebook::api
), передав текст сообщения (третий параметр в методе facebook::api
). Третьим параметром (именем ключа массива) может быть не только значение “message”, а также “link”, “picture”, “caption”, “description”.
Приведу пример:
PHP
Результат:
Дополнительная информация, которая может пригодиться:
Пользователь может с легкостью отменить некоторые права, предоставленные приложению при авторизации. Поэтому нужно хорошо продумать: как будет вести себя ваше приложение, в случае отмены пользователем одного или нескольких прав, а также удаления приложения. Это очень важно.
- Пользователь сможет удалить приложение на странице настроек приложений, нажав на [×] справа от названия приложения.
- На странице с параметрами приложений пользователь может удалять предоставленные приложению права по отдельности
Заключение
Возможности авторизации через Facebook в настоящее время очень полезны, так как в этой соцсети зарегистрировано большое количество пользователей. Несмотря на этот факт, использовать этот метод как единственный на своем сайте не рекомендуется, потому что еще остались те, кто не зарегистрирован. Если на вашем сайте не будет альтернативного способа авторизации, то незарегистрированные на Facebook посетители не смогут зарегистрироваться и войти на ваш сайт.
Перевод – Земсков Матвей
Оригинал статьи: http://net.tutsplus.com/tutorials/php/how-to-authenticate-your-users-with-facebook-connect/
Уважаемые посетители!
Информация в этой статье устарела и является неактуальной.
Ознакомьтесь с обновленной статьей об авторизации на сайте через Facebook (PHP SDK v4)