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


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-сервера) в своём блоге. Если интересно - следите.

(С)


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


29 декабря 2007  7 298 377   Версия для печати


Похожие публикации

Сайт для школы Каратэ

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

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

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

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

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

Как спроектировать навигацию по разделам сайта

И снова полезный материал с Вебпланеты. Почему на некоторых сайтах нам удаётся найти то, что нужно, а другие "теряют" пользователей после пары кликов? Как спроектировать навигацию по разделам, если у... читать далее

20 Ajax эффектов, которые должен знать веб-разработчик (1-5)

На сайте nettuts.com была опубликована статья с примерами и исходниками 20 Ajax эффектов, способных придать вашему сайт современный вид и повысить его юзабилити. Перевод данного обзора выполненый для... читать далее

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

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

Комментарии (7)

  1. #1 написал: Василий
    Группа: Гости
    22 февраля 2008 16:49

    Интересные факты - пригодится. Спасибо.
    • 0

       

  2. #2 написал: ELF
    Группа: Гости
    1 мая 2008 20:34

    суппер, автор молодец.
    • 0

       

  3. #3 написал: OpenID
    Группа: Гости
    19 мая 2008 15:12

    Оригинально и доступно ! Спасибо.
    • 0

       

  4. #4 написал: Jeka
    Группа: Гости
    8 апреля 2009 07:30

    Здравствуйте. Подскажите пожалуйста как добавить OpenID к торрент трекеру TBDev. Сделал все по инструкции, но при логине выходит ошибка "Регистрация не удалась: Nonce already used or out of range". В качестве сервера использую яндекс. Подскажите пожалуйста.
    • 0

       

  5. #5 написал: TCSE
    Группа: Администраторы
    8 апреля 2009 13:19

    Цитата: Jeka
    Подскажите пожалуйста как добавить OpenID к торрент трекеру TBDev.


    вам лучше задать свой вопрос автору данного поста на его сайте по ссылке http://daeq.ru/2007/12/28/openid-integra
    tion/
    • 0

       

  6. #6 написал: Герман
    Группа: Гости
    30 июня 2009 14:22

    Понравилась статья. А будет ли продолжение?
    • 0

       

  7. #7 написал: тра та та
    Группа: Гости
    25 апреля 2011 12:31

    Хорошая статья
    • 0

       

  8. #8 написал: doodmanez
    Группа: Гости
    3 мая 2011 14:57

    - ))) супер.
    • 0

       

Прокомментировать


@

  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent

Архив сайта

Реклама на сайте Фк рубин официальный сайт алексей еременко перешел в рубин.