Pull to refresh

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

Reading time3 min
Views7.1K
Доброе утро всем, кто уже читает Хабрахабр!

Работая над «Клубом анонимных Дедов Морозов» для Хабра, нам пришлось решить проблему с авторизацией пользователя через Хабр. На 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 пользователи со злости начнут вводить в форму имена в ничем неповинных Хабролюдей, которым начнет приходить в личку «Спам». Чтобы решить эту проблему, можно поставить каптчу или заносить пользователей в свою базу данных, чтобы не слать им сообщение повторно.

UPDATE: Если написать сюда, то можно получить доступ к OAuth Хабрахабра.
Tags:
Hubs:
+22
Comments9

Articles