Как добавить OpenID на сайт

Скрипты и советы | 29 декабря 2007

OpenID - несомненно, полезный механизм как для пользователей, так и для владельцев сетевых ресурсов.

Пользователям он даёт:

Возможность запомнить один логин и один пароль и использовать его везде

Не нужно каждый раз вводить одни и те же данные. В идеале каждый сайт будет требовать только ввода данных, специфичных именно для этого сайта

Не нужно регистрироваться. Хотя часто это недолго (несколько минут), но регистрироваться на каждом сайте напрягает


Для владельцев сайтов тоже есть преимущества:

Т.к. это удобнее пользователю, больше пользователей будет регистрироваться

Возможность получить данные пользователя, которые в другом случае он поленился бы вводить (хотя и не скрывает)

В перспективе - возможность обновления данных о пользователе (как контактной информации, так и информации о его связях, вкусах и т.д. и т.п.)


Благо, сейчас достаточно хороших библиотек для работы с OpenID и достаточно OpenID-провайдеров (в том числе многие социальные сети), чтобы эта фича была востребована на сайте.

Сейчас я расскажу и покажу, как за пару часов добавить поддержку OpenID к существующему сайту. Я не рассматриваю случаи, когда сайты построены на основе популярных движков (вроде WordPress или Drupal), для которых существуют плагины, делающие за вас всю работу. Речь будет идти о сайте в самом общем случае.

Эту статью я решил написать после подключения OpenID к своему сайту maskas.ru, на котором можно посмотреть рабочую версию того, что я сейчас покажу.

Работать это, как и сам сайт, будет на PHP с использованием библиотеки PHP OpenID Library.

Предполагается, что на сайте уже есть таблица с пользователями, которая используется как основное хранилище данных о них.

Архив со всеми скриптами, которые будут использоваться, можно скачать с меня: здесь.

Итак, приступим.

1


Для начала скачайте библиотеку и перенесите папочку Auth туда, где php-скрипты смогут найти её при использовании include.


2


Теперь создадим таблицу связей OpenID-идентификаторов с пользователями.


CREATE TABLE `openid_user_ref` (`openid` varchar(255) NOT NULL,`user_id` int(11) NOT NULL,PRIMARY KEY (`openid`))



3


Нужно добавить куда-нибудь на сайт (скорее всего, туда же, где находится форма логина) форму с одним полем ввода для OpenID-идентификатора, перенаправляющую нас на страницу, на которой будет происходить проверка подлинности идентификатора. Выглядеть это будет примерно так:

<form method="get" action="openid_verify.php">OpenID: <input name="openid_url" type="text" /></form>


Для лучшей узнаваемости можно добавить к полю ввода картинку вроде Как добавить OpenID на сайт такой.


4


Переписываем файлы из моего примера в корень своего сайта (потом вы сможете их поместить куда нужно, придётся только кое-где поменять пути). Файл openid_verify.php вам трогать, скорее всего, не придётся - он занимается тем, что проверяет правильность введённого OpenID-идентификатора и перенаправляет пользователя на сайт OpenID-провайдера для проверки. В нём вам может понадобиться изменить только список запрашиваемых данных пользователя здесь:

$sreg_request = Auth_OpenID_SRegRequest::build(// Requiredarray('nickname'),// Optionalarray('fullname', 'email','gender'));



Файл openid_complete.php уже интереснее. На него пользователь попадает после проверки провайдером и здесь совершаются все необходимые действия по добавлению пользователя в базу или логину. Я написал просты заглушки на нужные функции (создания пользователя, его логина в систему), которые вам нужно будет заменить на что-то более подходящее.

В моём примере логика такая: если OpenID-идентификатор нам неизвестен, мы автоматически создаём нового пользователя с данными, предоставленными OpenID-провайдером. Если идентификатор известен - логиним пользователя.

При создании пользователя используется ник, полученный от OpenID-провайдера. Если ник не получен или полученный ник не подходит (что проверяется функцией check_nickname), то он генерируется из OpenID-идентификатора.

Список данных о пользователе, которые теоретически можно получить от провайдера, достаточно скромен (т.к. используется расширение SRE, описанное в статье обмен пользовательскими данными в OpenID), но все основные данные получить можно.

Для начала вы можете просто распаковать пример в какую-либо папку на сервере и запустить - он работоспособен и сам по себе (особенно если указать правильные параметры для подключения к MySQL в файле openid_common.php). После замените заглушки по созданию пользователя и логину на подходящие для вашего сайта функции и готово - пользователи могут регистрироваться и заходить на ваш сайт при помощи OpenID.


Примечания:

Если вы используете библиотеку под Windows, то вам, скорее всего, нужно установить переменную Auth_OpenID_RAND_SOURCE из файла CryptUtil.php в null.

Не забывайте чистить директорию со временными файлами (путь к ней указывается при создании объекта Auth_OpenID_FileStore). Если ваш сайт достаточно посещаемый, то через время она может начать занимать заметное место на диске.

Я не рассматривал здесь вопрос прикрепления OpenID-идентификаторов к существующим пользователям и объединения OpenID-идентификаторов в одного пользователя. Всё это можно дописать на основе вышеизложенного.

Вскоре я собираюсь написать о предоставлении пользователям своего сайта OpenID-идентификатора (т.е. установке OpenID-сервера) в своём блоге. Если интересно - следите.

(С)
OpenID Mod авторизации для DLE

ОБНОВЛЕНИЕ ! Представляем вам долгожданный модуль OpenID авторизации на сайтах работающих на движке DataLife Engine....

Подробнее
Введение в поисковую оптимизацию

В свете глобальной борьбы со спамом, пиаром, seo и прочей рекламой, многие стали боятся использовать эти инструменты во...

Подробнее
Отслеживаем действия пользователя с помощью CSS

В этом посте вы сможете узнать, почему даже с выключенным JavaScript и без плагинов, вы все равно можете отсылать...

Подробнее
Сайт для школы Каратэ

Мартовская работа нашей студии - официальное представительство школы Каратэ Киокушинкай из города Красное Село....

Подробнее
Web-телефония. Обзор технологий

Продолжаем публикацию интересных заметок с хабрхабры... В этой статье я расскажу о том, какие существуют методы...

Подробнее
Общение с заказчиком сайта

или Что говорят заказчики сайтов и как это следует понимать. "На сайте должен быть форум" - На сайте планируется...

Подробнее

💬 Комментарии

В связи с новыми требованиями законодательства РФ (ФЗ-152, ФЗ «О рекламе») и ужесточением контроля со стороны РКН, мы отключили систему комментариев на сайте.

🔒 Важно Теперь мы не собираем и не храним ваши персональные данные — даже если очень захотим.

💡 Хотите обсудить материал?

Присоединяйтесь к нашему Telegram-каналу:

https://t.me/tcsecms/

Нажмите кнопку ниже — и вы сразу попадёте в чат с комментариями

  1. Интересные факты - пригодится. Спасибо.
    Василий Василий 22 февраля 2008 16:49
  2. суппер, автор молодец.
    ELF ELF 1 мая 2008 20:34
  3. Оригинально и доступно ! Спасибо.
    OpenID OpenID 19 мая 2008 15:12
  4. Здравствуйте. Подскажите пожалуйста как добавить OpenID к торрент трекеру TBDev. Сделал все по инструкции, но при логине выходит ошибка "Регистрация не удалась: Nonce already used or out of range". В качестве сервера использую яндекс. Подскажите пожалуйста.
    Jeka Jeka 8 апреля 2009 07:30
  5. Цитата: Jeka
    Подскажите пожалуйста как добавить OpenID к торрент трекеру TBDev.


    вам лучше задать свой вопрос автору данного поста на его сайте по ссылке http://daeq.ru/2007/12/28/openid-integra
    tion/
    TCSE TCSE 8 апреля 2009 13:19
  6. Понравилась статья. А будет ли продолжение?
    Герман Герман 30 июня 2009 14:22
  7. Хорошая статья
    тра та та тра та та 25 апреля 2011 12:31
  8. - ))) супер.
    doodmanez doodmanez 3 мая 2011 14:57