Начиная с 16 августа, Twitter больше не будет поддерживать базовый протокол аутентификации для своей платформы. Это означает, что единственный способ аутентификации пользователей будет через приложение Twitter. В этом уроке я покажу вам, как использовать Twitter в качестве системы аутентификации одним нажатием, как мы это делали с Facebook .
Шаг 1: Настройка приложения
Сначала нам нужно будет установить новое приложение Twitter.
- Зарегистрируйте новое приложение на dev.twitter.com/apps/
- Заполните поля для своего сайта соответствующим образом, просто убедитесь, что в браузере « Тип приложения» выберите « Браузер» и задайте для URL обратного вызова что-то вроде
http://localhost.com/twitter_login.php
(http://localhost/
не будет принято потому что у него нет доменного имени). - Наконец, выберите « Чтение и запись» . Введите капчу, нажмите «Зарегистрировать приложение» и примите Условия использования.
Теперь вы увидите экран, как показано ниже.
В ближайшее время мы будем использовать ключ Consumer и секретные значения Consumer .
Теперь, когда это сделано, давайте загрузим библиотеку. Поскольку мы будем кодировать с помощью PHP, кажется, лучшим из них является twitteroauth ; но если вы используете другой язык, вы найдете здесь и другие хорошие библиотеки .
Найдите каталог twitteroauth
внутри zip-файла и распакуйте его в папку вашего приложения.
Наконец, поскольку мы используем Twitter для аутентификации пользователей, нам понадобится таблица базы данных для хранения этих пользователей. Вот быстрый пример того, что мы будем делать.
1
2
3
4
5
6
7
8
9
|
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`oauth_provider` varchar(10),
`oauth_uid` text,
`oauth_token` text,
`oauth_secret` text,
`username` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
Обратите внимание на oauth_token
и oauth_secret
. Для проверки подлинности пользователей для OAuth в Twitter требуются значения token
и token_secret
, поэтому мы token_secret
их. С этим мы закончили с настройкой!
Шаг 2: Регистрация пользователей
На этом этапе мы будем делать три вещи:
- Запрос авторизации из твиттера.
- Регистрация или, если пользователь уже зарегистрирован, войти в систему.
- Установка данных в сеанс.
Запрос авторизации
Рабочий процесс OAuth начинается с создания URL-адреса для запроса; пользователь перенаправляется на этот URL и запрашивается авторизация. После предоставления, приложение перенаправляет обратно на наш сервер с двумя токенами в параметрах URL, которые необходимы для аутентификации.
Давайте начнем с включения библиотеки и запуска обработчика сеанса.
1
2
|
require(«twitteroauth/twitteroauth.php»);
session_start();
|
После этого давайте создадим новый экземпляр TwitterOAuth, предоставив ему ключ потребителя и секрет потребителя, которые Twitter предоставил нам при создании приложения. Затем мы запросим токены аутентификации, сохраним их в сеансе и перенаправим пользователя в Twitter для авторизации.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
// The TwitterOAuth instance
$twitteroauth = new TwitterOAuth(‘YOUR_CONSUMER_KEY’, ‘YOUR_CONSUMER_SECRET’);
// Requesting authentication tokens, the parameter is the URL we will be redirected to
$request_token = $twitteroauth->getRequestToken(‘http://localhost.com/twitter_oauth.php’);
// Saving them into the session
$_SESSION[‘oauth_token’] = $request_token[‘oauth_token’];
$_SESSION[‘oauth_token_secret’] = $request_token[‘oauth_token_secret’];
// If everything goes well..
if($twitteroauth->http_code==200){
// Let’s generate the URL and redirect
$url = $twitteroauth->getAuthorizeURL($request_token[‘oauth_token’]);
header(‘Location: ‘. $url);
} else {
// It’s a bad idea to kill the script, but we’ve got to know when there’s an error.
die(‘Something wrong happened.’);
}
|
Сохраните его как twitter_login.php
, перейдите по twitter_login.php
http://localhost.com/twitter_login.php
или как там есть имя вашего локального хоста. Если все прошло правильно, вы должны быть перенаправлены на twitter.com, и вы должны увидеть что-то вроде этого.
Нажмите Разрешить, и вы будете перенаправлены на http://localhost.com/twitter_oauth.php
— так как мы установили этот URL-адрес в качестве параметра в getRequestToken
. Мы не создали этот файл, поэтому он должен выдать ошибку. Создайте этот файл, затем включите библиотеку и начните сеанс, как мы это делали в первом файле.
После этого нам понадобятся три вещи:
- Проверка подлинности в данных запроса URL
- Ток авторизации из сессии
- Аут секрет от сессии
Итак, первое, что нужно сделать в этом скрипте, это проверить эти данные и перенаправить, если одна из этих переменных пуста.
1
2
3
4
5
6
|
if(!empty($_GET[‘oauth_verifier’]) && !empty($_SESSION[‘oauth_token’]) && !empty($_SESSION[‘oauth_token_secret’])){
// We’ve got everything we need
} else {
// Something’s missing, go back to square 1
header(‘Location: twitter_login.php’);
}
|
Теперь, если все установлено, внутри условия мы будем создавать экземпляр TwitterOAuth, но с токенами, которые мы только что получили в качестве третьего и четвертого параметров; после этого мы получим токен доступа, который является массивом. Этот токен мы будем сохранять в базе данных. Наконец, мы сделаем быстрый тест, чтобы увидеть, все ли работает.
01
02
03
04
05
06
07
08
09
10
|
// TwitterOAuth instance, with two new parameters we got in twitter_login.php
$twitteroauth = new TwitterOAuth(‘YOUR_CONSUMER_KEY’, ‘YOUR_CONSUMER_SECRET’, $_SESSION[‘oauth_token’], $_SESSION[‘oauth_token_secret’]);
// Let’s request the access token
$access_token = $twitteroauth->getAccessToken($_GET[‘oauth_verifier’]);
// Save it in a session var
$_SESSION[‘access_token’] = $access_token;
// Let’s get the user’s info
$user_info = $twitteroauth->get(‘account/verify_credentials’);
// Print user’s info
print_r($user_info);
|
Если ничего не происходит, print_r
должен показать данные пользователя. Вы можете получить идентификатор пользователя с помощью $user_info->id
, его или ее имя пользователя с помощью $user_info->screen_name
; там также есть куча другой информации.
Очень важно понимать, что oauth_verifier
не использовался до этого. Если вы видите информацию о пользователе правильно, а затем перезагружаете страницу, скрипт выдаст ошибку, так как эта переменная была использована. Просто вернитесь в twitter_login.php
и он автоматически сгенерирует еще один свежий токен.
Регистрация пользователей
Теперь, когда у нас есть информация о пользователе, мы можем ее зарегистрировать, но сначала мы должны проверить, существуют ли они в нашей базе данных. Давайте начнем с подключения к базе данных. Добавьте эти строки в начале сценария.
1
2
|
mysql_connect(‘localhost’, ‘YOUR_USERNAME’, ‘YOUR_PASSWORD’);
mysql_select_db(‘YOUR_DATABASE’);
|
Измените информацию базы данных по мере необходимости. Теперь, чуть ниже, где мы получаем информацию о пользователе, нам нужно проверить его в нашей базе данных. Если его или ее там нет, мы введем информацию. Если пользователь был зарегистрирован, мы должны обновить токены, потому что Twitter сгенерировал новые, а те, что у нас в базе данных, теперь не могут использоваться. Наконец, мы устанавливаем информацию о пользователе в сессионные переменные и перенаправляем в twitter_update.php
.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
if(isset($user_info->error)){
// Something’s wrong, go back to square 1
header(‘Location: twitter_login.php’);
} else {
// Let’s find the user by its ID
$query = mysql_query(«SELECT * FROM users WHERE oauth_provider = ‘twitter’ AND oauth_uid = «. $user_info->id);
$result = mysql_fetch_array($query);
// If not, let’s add it to the database
if(empty($result)){
$query = mysql_query(«INSERT INTO users (oauth_provider, oauth_uid, username, oauth_token, oauth_secret) VALUES (‘twitter’, {$user_info->id}, ‘{$user_info->screen_name}’, ‘{$access_token[‘oauth_token’]}’, ‘{$access_token[‘oauth_token_secret’]}’)»);
$query = mysql_query(«SELECT * FROM users WHERE id = » . mysql_insert_id());
$result = mysql_fetch_array($query);
} else {
// Update the tokens
$query = mysql_query(«UPDATE users SET oauth_token = ‘{$access_token[‘oauth_token’]}’, oauth_secret = ‘{$access_token[‘oauth_token_secret’]}’ WHERE oauth_provider = ‘twitter’ AND oauth_uid = {$user_info->id}»);
}
$_SESSION[‘id’] = $result[‘id’];
$_SESSION[‘username’] = $result[‘username’];
$_SESSION[‘oauth_uid’] = $result[‘oauth_uid’];
$_SESSION[‘oauth_provider’] = $result[‘oauth_provider’];
$_SESSION[‘oauth_token’] = $result[‘oauth_token’];
$_SESSION[‘oauth_secret’] = $result[‘oauth_secret’];
header(‘Location: twitter_update.php’);
}
|
Обратите внимание, что эти запросы не проверены; если вы оставите их как есть, вы оставите свою базу данных уязвимой. Наконец, ниже соединения с базой данных, мы должны установить проверку, чтобы убедиться, что пользователь вошел в систему.
1
2
3
4
|
if(!empty($_SESSION[‘username’])){
// User is logged in, redirect
header(‘Location: twitter_update.php’);
}
|
Теперь вы можете приветствовать пользователя по его или ее имени пользователя.
1
|
<h2>Hello <?=(!empty($_SESSION[‘username’]) ? ‘@’ . $_SESSION[‘username’] : ‘Guest’);
|
Давайте перейдем к веселой стороне: обновление, следование и чтение.
Шаг 3: Чтение Статусов
Доступно более двадцати категорий ресурсов: временная шкала, твиты, пользователи, тренды, списки, прямые сообщения и т. Д. У каждого есть множество методов, вы можете проверить их все в официальной документации . Мы перейдем к основам, так как большинство этих функций доступны аналогичным образом.
Как и два других скрипта, нам нужно создать экземпляр TwitterOAuth, включая переменные в сеансе.
1
2
3
|
if(!empty($_SESSION[‘username’])){
$twitteroauth = new TwitterOAuth(‘YOUR_CONSUMER_KEY’, ‘YOUR_CONSUMER_SECRET’, $_SESSION[‘oauth_token’], $_SESSION[‘oauth_secret’]);
}
|
Начнем с временной шкалы пользователя. Ссылка говорит нам, что путь это statuses/home_timeline
; игнорируйте версию и формат , об этом позаботится библиотека.
1
2
|
$home_timeline = $twitteroauth->get(‘statuses/home_timeline’);
print_r($home_timeline);
|
Это даст вам график времени. Вы можете получить каждый элемент с помощью цикла foreach
. Тем не менее, ссылка указывает некоторые необязательные параметры, такие как count
, который ограничивает количество твитов, которые будут выбраны. Фактически, второй параметр get
— это массив всех необходимых опций, поэтому, если вы хотите получить последние сорок твитов, вот код:
1
|
$home_timeline = $twitteroauth->get(‘statuses/home_timeline’, array(‘count’ => 40));
|
Кроме того, вы можете увидеть чей-то график, если он не защищен. statuses/user_timeline
требует либо идентификатор пользователя, либо псевдоним. Если вы хотите проверить временную шкалу @nettuts, вам нужно использовать следующий фрагмент:
1
|
$nettuts_timeline = $twitteroauth->get(‘statuses/user_timeline’, array(‘screen_name’ => ‘nettuts’));
|
Как вы можете видеть, после аутентификации чтение временных шкал становится легким делом.
Шаг 4: Дружба
С друзьями вы можете проверить, следует ли пользователь за другим, а также подписаться или отписаться от других пользователей. Этот фрагмент будет проверять, подписаны ли вы на меня, и создаст подписку, если нет.
Но сначала, проверьте friendships/exists
и friendships/create
ссылку. Заметьте что-нибудь? friendships/create
метод POST. К счастью, библиотека включает функцию post()
, которая работает так же, как функция get()
; Основное отличие состоит в том, что get()
предназначен для чтения, а post()
для создания, удаления или обновления.
В любом случае, для friendships/exists
требуется два параметра: user_a
и user_b
, а для friendships/create
user_b
требуется только один, либо screen_name
либо user_id
.
1
2
3
4
5
|
$follows_faelazo = $twitteroauth->get(‘friendships/exists’, array(‘user_a’ => $_SESSION[‘username’], ‘user_b’ => ‘faelazo’));
if(!$follows_faelazo){
echo ‘You are NOT following @faelazo!’;
$twitteroauth->post(‘friendships/create’, array(‘screen_name’ => ‘faelazo’));
}
|
Вы можете отписаться от пользователя, используя в основном тот же код, который создает подписку, просто замените create
на destroy
:
1
2
3
4
5
|
$follows_faelazo = $twitteroauth->get(‘friendships/exists’, array(‘user_a’ => $_SESSION[‘username’], ‘user_b’ => ‘faelazo’));
if($follows_faelazo){
echo ‘You are following @faelazo!
$twitteroauth->post(‘friendships/destroy’, array(‘screen_name’ => ‘faelazo’));
}
|
Шаг 5: публикация обновлений
Это, пожалуй, самый интересный раздел, поскольку он является ядром Twitter: опубликовать обновление, как вы могли себе представить, довольно просто. Путь — это statuses/update
, метод — POST (поскольку мы не читаем), а один обязательный аргумент — это status
.
1
|
$twitteroauth->post(‘statuses/update’, array(‘status’ => ‘Hello Nettuts+’));
|
Теперь перейдите на страницу своего профиля в Twitter, и вы увидите свой твит.
Давайте ретвитим обновление @Nettuts, объявляющее конкурс HTML 5 ; идентификатор статуса — 19706871538
и ссылка говорит нам, что путь — это statuses/retweet/:id
, где часть :id
— это идентификатор статуса, который мы будем ретвитнуть. Метод POST и не требует дополнительных параметров.
1
|
$twitteroauth->post(‘statuses/retweet/19706871538’);
|
Чтобы удалить твит, вам нужно будет передать идентификатор статуса, который вы уничтожаете, в первом параметре, как ретвит. Если идентификатор твита 123456789, код для уничтожения будет.
1
|
$twitteroauth->post(‘statuses/destroy/123456789’);
|
Конечно, этот код может удалять только твиты, созданные аутентифицированным пользователем.
Выводы
API Twitter довольно прост для понимания; это намного более задокументировано, чем даже Facebook (хотя Facebook предлагает собственную библиотеку). К сожалению, аутентификация не так гладка, как мы могли бы надеяться, в зависимости от данных сеанса.
Стоит отметить, что после авторизации пользователя Twitter (при условии, что у приложения есть права на чтение и запись), вы можете контролировать этот аккаунт. Если вы что-то измените от имени пользователя без его разрешения, вы создадите проблемы. Используйте это с осторожностью!
Изменения API, поступающие в Twitter, будут запрещать базовую аутентификацию; Твиттер фокусируется на прекращении бесчисленных мошенников, которые обманом заставляют пользователей отказываться от своих учетных данных. OAuth — это решение; и, если вы работали над учебным пособием по Facebook Connect , теперь вы можете предоставить пользователям своего веб-сайта или приложения быстрый вход без учетных данных, используя свой выбор двух наиболее часто используемых социальных сетей. Как это круто?