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