Блиблиотека для авторизации через Хабрахабр

от автора

Доброе утро всем, кто уже читает Хабрахабр!

Работая над «Клубом анонимных Дедов Морозов» для Хабра, нам пришлось решить проблему с авторизацией пользователя через Хабр. На Dirty пользователю предлагалось разместить у себя в профиле особую ссылку, наличие которой проверялось их сервером. Мы же решили пойти другим путем и максимально упростить авторизацию для человека, решившего принять участие в акции.

Хотя в итоге библиотека HabraAuth, о которой пойдет речь в топике, не была использована, но она использует тот же принцип авторизации, что и на habra-adm.ru — пользователь вводит свой ник на Хабре, и с аккаунта почтового робота или с аккаунта разработчика ему приходит особая ссылка по Хабропочте, перейдя по которой он и подтверждает владение своим аккаунтом.

Для конечного пользователя при использовании HabraAuth авторизация выглядит и того проще: он вводит свой ник, жмет «Войти» и сервер перекидывает его в Хабропочту, где ему остается только нажать ссылку «Войти» еще раз.



Рассмотрим пример подключения HabraAuth для вашего сайта. Для начала скачайте последнюю версию библиотеки — сделать это лучше всего, клонировав репозиторий на GitHub:

git clone https://github.com/kafeman/HabraAuth.git 

Сама библиотека находится в файле HabraAuth.class.php, его нужно подключить в первую очередь:

<?php  include('HabraAuth.class.php');  ?> 

Теперь создадим простую форму для авторизации. Например, такую:

<h1>Пример авторизации через Хабр</h1>  <form method="post">      <p>Введите ваш ник на Хабре:</p>      <p>         <input type="text" name="login">         <input type="submit" value="Авторизуй меня!">     </p>  </form> 

И напишем обработчик для нее:

// Это небольшой конфиг, который использует библиотека // Его можно объединить с конфигом вашего сайта $config = array(     // Адрес callback-страницы     // Ссылка на нее будет отправлена по Хабропочте     'callback' => 'http://localhost/sample/callback.php',      // Соль     // Придумайте что-нибудь посложнее, иначе ничего не получится ;-)     'salt' => 'qwerty',      // Куки от аккаунта, с которого будет слаться почта     // Будьте осторожны - получив их, злоумышленник зайдет под вашим аккаунтом на Хабр     // Держите их в очень надежном месте     'cookies' => array(         'PHPSESSID' => '8ba44cc67a851d1c43d740c356665061',         'hsec_id' => 'c086a2c37f395cbb9aa7b064c8c712db',     ), );  // Создаем новый объект HabraAuth // К нему мы и будем обращаться $habraAuth = new HabraAuth($config);  // Метод Auth генерирует ссылку и шлет ее по Хабропочте $habraAuth->Auth($_POST['login']);  // Перенаправляем пользователя в Хабропочту, чтобы ему же было удобнее header('Location: http://habrahabr.ru/users/none/mail/'); 

Теперь создадим callback-страницу, на которою пользователь перейдет из Хабропочты:

<?php  // Если не пришло имя пользователя и хэш, то перенаправляем на форму логина if (empty($_GET['user']) || empty($_GET['hash'])) {     header('Location: /sample/login.php');     exit(); }  // Подключаем библиотеку include __DIR__ . '/../HabraAuth.class.php';  // Конфиг, тут можно задать только соль $config = array('salt' => 'qwerty');  // Создаем новый объект HabraAuth $habraAuth = new HabraAuth($config);  // Проверяем хэш if (!$habraAuth->CheckAuth($_GET['user'], $_GET['hash'])) {     header('Location: /sample/login.php');     exit(); }  // TODO - заносим пользователя в БД или просто приветствуем его echo 'Привет, ' . $_GET['user'] . ', как твои хабродела?';  ?> 

В итоге получился почти OAuth 🙂

Единственная проблема, с которой вы можете столкнуться — ReadOnly пользователи со злости начнут вводить в форму имена в ничем неповинных Хабролюдей, которым начнет приходить в личку «Спам». Чтобы решить эту проблему, можно поставить каптчу или заносить пользователей в свою базу данных, чтобы не слать им сообщение повторно.

ссылка на оригинал статьи http://habrahabr.ru/post/157255/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *