Сейчас на сайте

Сейчас 6 гостей онлайн

Поиск

Tag Cloud

Twitter oAuth и Cod... Баллада о г... сихи лирик... стихи лири... Динамическ... Домашняя с... Использова... Использова... Отправка с... Создание ф... Шепот посл... TinyMCE в Rails стихи лири... Быстрая ра... Пишем собс... Создание с... Установка ... Ностальгия... Москва-Бел... стихи лири... Стихи про п... Крылья сти... Создание п... Простой по... Создание п... Одинокий в... Гражданин ... Несчастный... Сонет стих... Отрезок ст... Врагу не сд... Предчувств... Поиск в ст... Использова... Смерть дву... Использова... Как сделат... Как сделат... Облако тег... Южная сере... Программна... Codeigniter в де... CodeIgniter: фор... проверка в... стихи лири... WEB fetcher(scrappe... Простой Twitt... стихи твор... стихи лири... Побег с Сол... Отправка SMS... MS VSTO 2007/Infusio... Установка R... Степные тр... моя любовь. К твоим оз... Сомкнуть л... чтоб отдат... вот – вот ... еще не расс... Снег тишина и лу... и мира пово... что мой пос... Лишь ты. И т... ты любима ты чиста. Экспорт да... Я пью до дн... что нам теп... -Наш первый... Социальные... Социальные... Спит в можж... Воздух про... Стены рожденные ... эхо умрет. Неотправле... стихи лири... Он порезал... Боясь шагн... не осталос... Услышать з... Программир...

Twitter oAuth и CodeIgniter: как это работает PDF Печать E-mail
31.05.2011 01:30

В начале о собственно об принципах работы библиотеки Twitter oAuth, которую мы будем использовать.

Выглядит это так: пользователь вводит свой логин и пароль, скрипт далее отправляет GET запрос Twitter для получения кодов для запроса на авторизацию. Эти коды используется для проверки пользователя на сайте Twitterа. Затем запрос пользователя перенаправляется в Twitter чтобы разрешить (или отклонить) вход в систему. Отличительной чертой библиотеки oAuth является наличие так называемых «oAuth token(ов)» в конце каждой строки запроса. Теперь начнем разрабатывать наше приложение:

1. Скачиваем библиотеку oAuth отсюда http://oauth.googlecode.com/svn/code/php/

В папке system/application/libraries/ CodeIgnitera создаем новую папку /twitter/ .

2. Регистрируемся на Twitterе, http://twitter.com/apps/new Здесь мы получаем consumer key и consumer secret code. Это строки из хаотичного набор символов, которые впоследствии будут использоваться для авторизации. Обязательно нужно отметить чекбокс «Yes, use Twitter for login»,иначе будет невозможна аутентификация с помощью полученных здесь ключей. Полученные ключи сохраним.

3. Теперь нам нужно написать свой класс обработчик (wrapper) для работы с библиотекой oAuth. Назовем файл «Twitter_oauth.php»

<?php

require_once(APPPATH . 'libraries/twitter/OAuth.php');

class Twitter_oauth

{

var $consumer_key; //перемененная класса для ключа consumer

var $token_key; //переменная класса для хранения ключа token

var $method; //переменная для хранения метода oAuth Signature

var $http_status;// переменная для хранения HTTP Status Code

var $last_api_call;// URL последнего вызова API oAuth

4. Далее пишем, конструктор класса, естественно, он называется, так же как и класс:

Во-первых, мы вызываем метод библиотеки oAuth для

function Twitter_oauth($data) {

$this->method = new OAuthSignatureMethod_HMAC_SHA1();

$this->consumer = new OAuthConsumer($data['consumer_key'], $data['consumer_secret']);

if(!empty($data['oauth_token']) && !empty($data['oauth_token_secret']))

{

$this->token = new OAuthConsumer($data['oauth_token'], $data['oauth_token_secret']);

}

else

{

$this->token = NULL;

}

}

}

генерации цифровой подписи (OAuthSignatureMethod_HMAC_SHA1();) и 2 конструктора для создания ключей (new OAuthConsumer())из полученных данных в виде переменных запросов.

5. Следующий метод будет чисто служебным и будет использоваться только с одной целью – обработки полученного от Twittera ответа на запрос.

function parse_request($string)

{

$args = explode("&", $string);

$args[] = explode("=", $args['0']);

$args[] = explode("=", $args['1']);

$token[$args['2']['0']] = $args['2']['1'];

$token[$args['3']['0']] = $args['3']['1'];

return $token;

}

Этот метод получает строку запроса, и разделяют его по каждому встреченному символу «&».Получается массив типа «ключ-значение».Затем мы разделяем эту пару еще раз, убирая символ «=».Затем мы форматируем ключи массива так, чтобы они стали oauth_token and oauth_token_secret.

6. Теперь нам нужен другой служебный метод для получения данных Здесь мы используем другую РНР библиотеку сURL:

function http($url, $post_data = null)

{

$ch = curl_init();

if(defined("CURL_CA_BUNDLE_PATH"))

curl_setopt($ch, CURLOPT_CAINFO, CURL_CA_BUNDLE_PATH);

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);

curl_setopt($ch, CURLOPT_TIMEOUT, 30);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

if(isset($post_data))

{

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

}

$response = curl_exec($ch);

$this->http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);

$this->last_api_call = $url;

curl_close($ch);

return $response;

}

Вначале мы инициализируем сеанс с помощью метода curl_init(). После мы устанавливаем опцию для проверки подлинности SSL сертификата:

 

if(defined("CURL_CA_BUNDLE_PATH")) curl_setopt($ch, CURLOPT_CAINFO, CURL_CA_BUNDLE_PATH);

Затем мы устанавливаем соединение с указанным URL,который передается как параметр

в наш метод. Так же здесь назначаем некоторые характеристики соединения, как

то время ожидания соединения, типа возврата запроса и т.д.На конец, мы передаем

наши данные в Twitter и проверяем, правильно ли они были переданы.После исполнения

запроса и получение информационного сообщения, сессия сURL закрывается.

Возвращаются данные в виде токена.

7. Следующий метод будет отправлять запрос на авторизацию пользователя

с помощью request_token:

function get_request_token()

{

$args = array();

$request = OAuthRequest:: from_consumer_and_token($this->consumer, $this->token,

'GET', "https://twitter.com/oauth/request_token", $args);

$request->sign_request($this->method, $this->consumer, $this->token);

$request = $this->http($request->to_url());

$token = $this->parse_request($request);

$this->token = new OAuthConsumer($token['oauth_token'],

$token['oauth_token_secret']);

return $token;

}

 

В первой строке мы создаем массив аргументов, который потом будет передаваться в вызываемые методы. В самой функции будут использоваться методы библиотеки oAuth, так и методы данного класса. Вначале мы создаем OAuthRequest:: from_consumer_and_token() для отправки запроса в Twitter. Затем инициируем вход в систему посредством метода sign_request().Потом получаем данные с помощью метода http() и обрабатываем уже описанным выше методом parse_request(). И под конец мы создаем новый экземпляр OAuthConsumer и возвращаем его в виде токена.

8. Следующий метод будет очень похож на предыдущий с одним важным отличием – тут будем получать acces_token:

function get_access_token(){

$args = array();

$request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, 'GET', "https://twitter.com/oauth/access_token", $args);

$request->sign_request($this->method, $this->consumer, $this->token);\

$request = $this->http($request->to_url());

$token = $this->parse_access($request);

$this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);

return $token;

}

9. Теперь мы можем отправлять полностью сформированный запрос на вход в Twitter, используя полученные токены.

function get_authorize_URL($token)

{

if(is_array($token)) $token = $token['oauth_token'];

return "https://twitter.com/oauth/authorize?oauth_token=" . $token;

}

10 . Переходим к разработке класса контролера. Именно он и будет выполнять код вновь разработанной библиотеки.

<?php

session_start();

class Twitter extends Controller

{

var $data; //переменная класса

function Twitter()

{

parent::Controller();

$this->data['consumer_key'] = ""; // здесь мы вставим подученные значения ключей

$this->data['consumer_secret'] = "";

}

function index()

{

$this->load->library('twitter_oauth', $this->data);//загружаем нашу Twitter библиотеку

$token = $this->twitter_oauth->get_request_token(); //получаем request_token

$_SESSION['oauth_request_token'] = $token['oauth_token'];

//сохраняем как переменную РНР сессии

$_SESSION['oauth_request_token_secret'] = $token['oauth_token_secret'];

//записываем значение перепенной сессии в переменную $token

$request_link = $this->twitter_oauth->get_authorize_URL($token);

//производим авторизацию и получаем ссылку на страницу для входа в систему

$data['link'] = $request_link;

$this->load->view('twitter/home', $data);

//входим в Twitter

}

11. Далее нам необходимо добавить другую важную функцию, которая будет проверять доступ к нашему блогу, чтобы быть уверенным, что пользователи заходят именно из Twitterа. Для этого мы слегка изменим URL обратного вызова. Вот код этого метода.

function access()

{

$this->data['oauth_token'] = $_SESSION['oauth_request_token'];

$this->data['oauth_token_secret'] = $_SESSION['oauth_request_token_secret'];

$this->load->library('twitter_oauth', $this->data);

/* Request access tokens from twitter */

$tokens = $this->twitter_oauth->get_access_token();

//Сохраняем здесь токен доступа.

$_SESSION['oauth_access_token'] = $tokens['oauth_token'];

$_SESSION['oauth_access_token_secret'] = $tokens['oauth_token_secret'];

$this->load->view('twitter/accessed', $tokens);

}

12. Ну и конец, добавляем сюда функцию для выхода из Twitterа. Она очень простая – мы стираем РНР сессию и переходим в новый экран интерфейса.

function logout()

{

session_destroy();

$this->load->view('twitter/logout');

}

}

?>

13. Теперь нам еще нужно добавить, согласно модели MVC, на которой базируется CodeIgniter несколько файлов типа view . В папке system/application/views/ создаем папку под названием twitter.Там разместим наши файлы. Первый будет называться “home.php и будет служить для обработки токенов доступа:

<!DOCTYPE HTML>

<html>

<head>

<title>Twitter oAuth</title>

</head>

<body>

<p><a href="/<?php echo $link; ?>">Click here to login with Twitter oAuth</a></p>

</body>

</html>

14. Второй файл под названием “accessed.php” будет использоваться для и входа в систему с помощью методов класса контролера и в частности, метода access().

<!DOCTYPE HTML>

<html>

<head>

<title>Twitter oAuth - @<?php echo $screen_name; ?></title>

</head>

<body>

<p>Your account should now be registered with twitter. Check here: <a href="https://twitter.com/account/connections">https://twitter.com/account/connections</a></p>

</body>

</html>

 

15 . И последний файл в этой папке будет показывать сообщение о выходе из Twitterа. Вот его код:

<!DOCTYPE HTML>

<html>

<head>

<title>Twitter oAuth - Logged Out</title>

</head>

<body>

<p>You are no longer logged in!</p>

</body>

</html>

На этом все, приложение полностью готово к работе. В сущности, аналогичное решение можно использовать и в других случаях, где используется библиотека oAuth.

0
Обновлено 31.05.2011 01:32
 

Добавить комментарий


Защитный код
Обновить