Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
Submitted by Ромка on Пнд, 17/05/2010 - 00:26
Разработчики ВКонтакте.ру не так давно открыли доступ к OpenAPI — интерфейсу, позволяющему обычным пользователям авторизоваться на сторонних сайтах с использованием своих учетных записей ВКонтакте.ру.
Я выкладываю первую версию модуля vk_openapi, который интегрирует Drupal 6 с Open API. Демонстрацию работы модуля вы можете увидеть на этом сайте. Кнопка для авторизации с помощью учетной записи вКонтакте находится в форме авторизации (в правой колонке внизу) и на странице с формой входа.
Особенности модуля
- из учетной записи ВКонтакте выбираются все доступные поля и сохраняются в объекте $user;
- каждому созданному модулем пользователю автоматически может быть назначена роль;
- в качестве аватара нового пользователя может быть использован автар из профиля пользователя ВКонтакте;
- созданный модулем пользователь может быть связан с существующим на сайте аккаунтом.
В ближайших планах: обновление статуса пользователя на основе данных из профиля ВКонтакте.
Скачать модуль можно на drupal.org. В продолжении более подробное описание модуля и инструкция по его установке.
Работа модуля
Это пока первая и очень простая реализация модуля, работает он так:
- после нажатия пользователем кнопки "войти вКонтакте" модуль получает необходимые данные от сервера вКонтакте.
- Далее модуль проверяет есть ли в базе данных Друпала пользователь, связанный с именем, полученным от вКонтакте:
- если его нет, то создается новый пользователь и связывается с id пользователя ВКонтакте. Внимание! Важная деталь. Если в базе данных есть пользователь с именем не связанным с учетной записью вКонтакте и из вКонтакте приходит пользователь с таким же именем, то такие две учетные записи не будут связаны, для имени нового пользователя будет просто добавлен суффикс _N, где вместо N будет подставлено число.
- если связанный с учетной записью ВКонтакте пользователь есть, то будет использована найденная учетная запись.
- Выбранный пользователь авторизуется в системе.
- ВКонтакте не отдает адрес электронной почты, по этому модуль предлагает новому пользователю указать свой e-mail в настройках своего нового аккаунта.
Установка и настройка модуля
- Первым делом во ВКонтакте нужно создать приложение типа "Веб-сайт", для этого нужно перейти по ссылке: http://vkontakte.ru/pages.php?act=developers и нажать на кнопку "Подключить сайт".
- В настройках созданного приложения нужно указать адрес сайта (http://example.com/) и базовый домен (example.com), а также получить ID приложения и защищенный ключ, все эти четыре параметра нужно будет указать в настройках модуля vk_openapi.
- Теперь нужно скачать модуль, если вы этого еще не сделали, распаковать в папку sites/all/modules и включить его стандартными средствами Друпала.
- После активации модуля, на странице admin/settings/vk_openapi вы должны указать параметры созданного ранее приложения ВКонтакте.
Все, после выполнения этих действий к формам авторизации будет добавлена кнопка "войти вКонтакте" и пользователи смогут авторизоваться на вашем сайте с помощью учетных записей вКонтакте. При желании вы можете отключить вывод этой кнопки в формах авторизации, тогда в произвольное место страницы сайта нужно будет вставить код:
<div id="vk_login" class="vk_login" style="margin: 0 auto 20px auto;" onclick="doLogin();"></div>
который будет заменен на кнопку.
Я старался сделать этот модуль максимально простым для посетителей сайта — авторизоваться в системе можно всего одним кликом. Мне, например, сильно не нравится реализация Facebook Connect для Друпла тем, что после нажатия кнопки "Connect" пользователя заставляют еще заполнить некоторые поля в форме регистрации. По этому данные от ВКонтакте получаются только один раз, при первом входе в систему, и используются только имя и фамилия пользователя. Теоретически, эти данные можно периодически обновлять, также есть возможность получить данные о фотографиях пользователя и его аватарке, его друзьях изменениях статусов, связать логаут на Друпал-сайте с логаутом из ВКонтакте и т.п. Интересно знать нужен ли кому-нибудь подобный функционал или достаточно того, что уже есть сейчас?
164 Comments
Очень, очень! хочется версию
Submitted by Евгений Козлов on
Очень, очень! хочется версию под 7 Drupal
Есть проект
Submitted by Денис (не проверено) on
Роман,
Я знаю вас как самого продвинутого друпал разработчика в России. Данный модуль - очередное подтверждение.
Хотел бы предложить вам работу - или на постоянной основе или на проектной.
Напишите мне, если будет интересно, я расскажу вам о компании и о том, что мы хотим сделать.
Re: Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
Submitted by Артемов Константин on
Здорово, тоже хотелось бы писать на эту тему, жаль литературного дара нет. Да и не только
ошибка при авторизацции по кнопке через контактную форму
Submitted by Алексей Рубель on
http://clip2net.com/s/LLMz -
выскакивает такое окно при авторизации -. в чем может быть причина ?
и еще вопрос :
http://clip2net.com/s/LLS7
о каком урле здесь идет речь ? урл после входа на сайт ? Или это должен быть урл профиля в контакте ? Неплохо было бы в комментариях к полю дать несколько слов пояснений. Заранее спасибо !
вот такая
Submitted by Anonymous (не проверено) on
вот такая проблема
http://s015.radikal.ru/i331/1102/8f/c3d9e6bba095.jpg
как решать?
Drupal 7
Submitted by Garik (не проверено) on
Хотелось бы увидеть обновление этого модуля для 7й версии Друпала
D7
Submitted by Алексей Костин on
[quote=Garik]Хотелось бы увидеть обновление этого модуля для 7й версии Друпала[/quote]
Да, Роман, есть ли какие-то планы по портированию на D7? Или может посоветуете какое-то более комплексное решение (кроме Loginza), где ВКонтакт будет доступен для логина наряду с другими соцсетями?
проверка на уже существующий e-mail
Submitted by sergeysynergy (не проверено) on
Большое спасибо за отличный нужный модуль.
Если включить опцию обязательного e-mail (Oblige users to enter e-mail.) то пользователь при регистрации может указать любой, даже уже существующий у пользователя друпала e-mail. Таким образом оба пользователя не смогут сохранить свой аккаунт - e-mail получается дублируется.
Также небольшой вопрос: а что даёт подтверждение адреса e-mail, которое приходит при регистрации?
Сорри, туплю, видимо тоже
Submitted by sergeysynergy (не проверено) on
Сорри, туплю, видимо тоже самое, что и при обыкновенной регистрации )
Роман, в какую сторону
Submitted by semein (не проверено) on
Роман, в какую сторону копать: код преобразовывается в кнопку только на страничке /admin. во всех остальных местах (и в блоке, и в форме авторизации на главной сайта), он не преобразуется (внутри дива ничего не появляется).
на /admin стандартный garland
Submitted by semein (не проверено) on
на /admin стандартный garland
hostinh nic.ru and vk api
Submitted by vitsss (не проверено) on
бился пару часов, статья очень помогла но ни где ни слова не было сказано про "json".
Включил и все работает.
Страницы