Шаг первый: создаем и настраиваем приложение в Twitter
Первым делом создаем и настраиваем приложение в Twitter:
- Регистрируем новое приложение на dev.twitter.com/apps/
- Заполняем все поля соответствующими данными вашего сайта. Будьте внимательны при заполнении: в поле “Application Type” выбираем “Browser”, а в поле “Callback URL” указываем адрес, на который будет перенаправляться пользователь после авторизации. Например, http://localhost.com/twitter_login.php (http://localhost использовать невозможно, так как это невалидное доменное имя).
- Далее в пункте ”Default Access type” выбираем “Read&Write”, заполняем поле с CAPTCHA, соглашаемся с Условиями использования и регистрируем приложение.
После этих действий, вы увидите на экране следующую информацию:
В процессе работы мы будем использовать ключи приложения (“Consumer key” и “Consumer secret”).
После регистрации приложения, нужно скачать библиотеку twitteroauth , одну из лучших библиотек, написанную на PHP. Если вы используете другой язык программирования, ознакомьтесь со списком библиотек на других языках .
В скачанном zip-архиве найдите папку twitteroauth и распакуйте ее содержимое в папку вашего веб-приложения.
Для хранения информации о пользователях, авторизованных через Twitter, нужно будет создать Базу данных. Создать таблицу базы данных для хранения пользователей, можно примерно так:
SQL
Обратите внимание, на поля oauth_token
и oauth_secret
. Для авторизации пользователей через TwitterOAuth необходимы значения token и token_secret, поэтому будем хранить их.
На этом подготовительный этап закончен.
Шаг второй: регистрируем пользователей
Этот шаг состоит из трех этапов:
- Запрос авторизации в Twitter;
- Регистрация пользователя на сайте или авторизация пользователя, если он уже зарегистрирован;
- Сохранение данных о пользователе в сессии;
Запрос авторизации.
Процесс OAuth авторизации начинается с генерации URL, на который будет перенаправлен неавторизованный пользователь. После посещения этой страницы и ввода логина и пароля на ней, приложение перенаправляет пользователя назад на ваш сервер, при этом добавляя в URL 2 параметра, необходимые для авторизации. Значение параметров являются так называемые «токены» (tokens), которые участвуют в процессе авторизации.
Начнем с подключения библиотеки и создания сессии:
PHP
Далее нужно создать объект класса TwitterOAuth, передав значение ключей приложения - consumer key
и consumer secret
, полученных в процессе регистрации нашего приложения в Twitter. Затем, сделаем запрос токенов для авторизации, сохраняем их в сессии и перенаправляем пользователя на Twitter для ввода логина и пароля.
PHP
Сохраним этот файл как twitter_login.php в папке на вашем сервере и откроем его в браузере (в нашем случае, адрес будет следующий: http://localhost.com/twitter_login.php).
Если все сделано правильно, вы будете перенаправлены на twitter.com и увидите на экране следующую страницу:
После нажатия кнопки “Allow”, пользователь будет перенаправлен на адрес http://localhost.com/twitter_oauth.php. Это произойдет, потому что этот URL был использован в виде параметра при вызове метода TwitterOAuth::getRequestToken
. Этот файл мы пока не создали, поэтому сейчас произойдет ошибка. Чтобы этого избежать, нужно создать файл twitter_oauth.php. Файл должен содержать в самом начале те же строки, что и первый, а именно: подключение файла с библиотекой и функцию создания сессии.
После этого нам будут доступны значения 3 параметров: oauth_verifier
, oauth_token
, oauth_token_secret
. В файле twitter_oauth.php первым делом нужно проверить значения этих параметров и если хотя бы один из параметров пуст, перенаправить пользователя на файл twitter_login.php.
PHP
Если все правильно установлено, внутри первого условного блока, мы будем создавать экземпляр класса TwitterOAuth, но уже с использованием токенов, которые мы сейчас получили, в качестве третьего и четвертого параметра. Затем получаем access token, - он является массивом. Его мы и сохраним в базе данных. А сейчас сделаем небольшой тест, чтобы удостовериться, что все работает.
PHP
Если ошибок нет, функция print_r
выведет информацию о пользователе, которая является объектом. Идентификатор(ID) пользователя хранится в свойстве объекта $user_info->id
, а логин – в свойстве $user_info->screen_name
. Из свойств объекта можно получить и другую полезную информацию о пользователе.
Регистрация пользователей.
Теперь, когда у нас есть информация о пользователе, мы можем сохранить ее в базе данных. Только сначала нужно проверить, не зарегистрирован ли уже такой пользователь. Начнем с подключения к БД. Добавьте эти строчки в начало скрипта:
PHP
Замените данные для подключения к БД своими. Сразу после получения данных о пользователе, проверим – присутствует ли информация о нем в базе данных. Если нет – добавим информацию о пользователе в БД. Если пользователь уже зарегистрирован, мы должны обновить токены, так как Twitter уже сгенерировал новые, и те, которые находятся в БД на данный момент – неактуальны. В конце скрипта мы сохраним пользовательскую информацию в сессии и перенаправим пользователя на twitter_update.php.
PHP
Обратите внимание, что данные передаваемые в запрос, необходимо подготовить для этого - заэкранировать SQL спецсимволы. Если этого не сделать, в вашей БД могут появиться уязвимости. После подключения к БД, нужно добавить в скрипт код для проверки авторизации пользователя.
PHP
Теперь вы можете приветствовать его по имени.
PHP
Шаг третий: Читаем статусы
Как известно Twitter использует REST API – набор функций, к которым можно совершать запросы и получать ответы. Взаимодействие происходит по протоколу HTTP, таким образом обращение к какой-либо функции является простым HTTP-запросом. Например, https://api.twitter.com/1.1/statuses/user_timeline.json - обращение к функции statuses/user_timeline
. Ответ будет сформирован в формате JSON.
Существует более 20 категорий функций для работы с ресурсами Twitter. Можно проводить операции с отдельными твитами, списками твитов или пользователями. Также существует возможность отправки сообщения конкретному пользователю. В каждой категории API находится набор функций, подробнее с ними можно ознакомиться в официальной документации. Начнем знакомство с API Twiter c простых функций. Аналогично можно обращаться с более продвинутыми методами.
Перед использованием функций из Twitter API, в скрипте нужно создать объект класса TwitterOAuth, используя параметры из сессии:
PHP
Начнем с обращения к ленте твитов пользователя. В руководстве написано, что для этого используется statuses/home_timeline
. Используем этот запрос, но передадим не все параметры: опустим версию и формат – библиотека TwitterOAuth «позаботится» об этом сама.
PHP
В результате, этот код покажет нам весь массив твитов из ленты целиком. Если вам нужно обратиться к каждому твиту, можно воспользоваться циклом foreach
. У функции есть дополнительные параметры, например, count
, который ограничивает количество возвращаемых твитов. Эти параметры передаются методу в качестве массива. В коде ниже показано, как получить 40 твитов, опубликованных за последнее время:
PHP
Также вы можете посмотреть ленту твитов других пользователей, если они это не запретили в своем профиле. Для этого передадим в качестве параметра идентификатор или имя пользователя в Twitter. Следующий код покажет ленту твитов пользователя @nettuts:
PHP
Как вы видите, после аутентификации, у вас есть доступ к ленте твитов.
Шаг четвертый: взаимоотношения пользователей
Функциональность в области взаимоотношений пользователей заключается в следующем: можно проверить является ли один пользователь читателем другого, а также сделать пользователя читателем или, наоборот, перестать «следовать» за пользователем.
Сначала нужно ознакомиться с friendships/exists (определяет, является ли пользователь читателем другого пользователя) и friendships/create (создает связь между текущим и другим пользователем). Обратите внимание, что при использовании второго запроса, данные передаются методом POST. К счастью, в библиотеке TwitterOAuth имеется метод post(), который работает аналогично методу get()
. Отличие заключается в том, что get()
используется для чтения, а post()
– для записи, изменения и удаления.
В запросе friendships/exists
обязательны 2 параметра: user_a
и user_b
, а запрос friendships/create
принимает 1 параметр – это может быть либо screen_name
, либо user_id
.
PHP
Чтобы разорвать связь между пользователями, нужно использовать запрос friendships/destroy
:
Шаг пятый: создание твитов, ретвиты, удаление твитов
Этот раздел API, вероятно, самый интересный – используя его запросы, вы с легкостью сможете размещать твиты или делать ретвиты. Запрос statuses/update
использует метод POST (в случае отличном от чтения записей), ему требуется один аргумент – status
PHP
Данный код разместит твит в вашем профиле:
Давайте сделаем ретвит твита пользователя @Nettuts, с идентификатором 19706871538. Руководство сообщает нам, что для этого нужно использовать запрос statuses/retweet/:id
, где :id
– идентификатор твита, на который нужно сделать ретвит. Использует метод POST и не требует дополнительных параметров.
PHP
Чтобы удалить твит, нужно в показанном выше коде заменить retweet
на destroy
. Например, если ID твита 123456789, то чтобы удалить его нужно использовать следующий код:
PHP
Этот код удалит твиты только текущего авторизованного пользователя.
Заключение
API Twitter легко для понимания, оно гораздо более подробно описано, по сравнению с Facebook. К сожалению, не все так гладко с авторизацией, как хотелось бы – она зависит от настроек сессии.
Изменениями в API Twitter запрещена базовая авторизация - это сделано для предотвращения бесчисленного числа мошеннических действий и обмана пользователей при несанкционированном использовании данных из их профилей. Альтернативным решением является OAuth-авторизация, при ее использовании вы можете предоставить пользователям возможность авторизоваться на своем сайте или в приложении, не предоставляя полномочий приложению или сайту на изменение его профиля. Это замечательная возможность, не правда ли?
Перевод – Земсков Матвей
Оригинал статьи: http://net.tutsplus.com/tutorials/php/how-to-authenticate-users-with-twitter-oauth/