Вы находитесь на устаревшей версии сайта romka.eu. Она оставлена здесь на случай если я захочу поностальгировать по тому как выглядел интернет в 2012 году :) Так этот сайт выглядел с июня 2012 по февраль 2023. Эта версия сайта не обновляется, комментирование материалов отключено. Обновленная версия сайта доступна по адресу http://romka.eu.

Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте

Submitted by Ромка on Пнд, 17/05/2010 - 00:26

Ромка аватар

Разработчики ВКонтакте.ру не так давно открыли доступ к OpenAPI — интерфейсу, позволяющему обычным пользователям авторизоваться на сторонних сайтах с использованием своих учетных записей ВКонтакте.ру.

Я выкладываю первую версию модуля vk_openapi, который интегрирует Drupal 6 с Open API. Демонстрацию работы модуля вы можете увидеть на этом сайте. Кнопка для авторизации с помощью учетной записи вКонтакте находится в форме авторизации (в правой колонке внизу) и на странице с формой входа.

Особенности модуля

  • из учетной записи ВКонтакте выбираются все доступные поля и сохраняются в объекте $user;
  • каждому созданному модулем пользователю автоматически может быть назначена роль;
  • в качестве аватара нового пользователя может быть использован автар из профиля пользователя ВКонтакте;
  • созданный модулем пользователь может быть связан с существующим на сайте аккаунтом.

В ближайших планах: обновление статуса пользователя на основе данных из профиля ВКонтакте.

Скачать модуль можно на drupal.org. В продолжении более подробное описание модуля и инструкция по его установке.

Работа модуля

Это пока первая и очень простая реализация модуля, работает он так:

  1. после нажатия пользователем кнопки "войти вКонтакте" модуль получает необходимые данные от сервера вКонтакте.
  2. Далее модуль проверяет есть ли в базе данных Друпала пользователь, связанный с именем, полученным от вКонтакте:
    • если его нет, то создается новый пользователь и связывается с id пользователя ВКонтакте. Внимание! Важная деталь. Если в базе данных есть пользователь с именем не связанным с учетной записью вКонтакте и из вКонтакте приходит пользователь с таким же именем, то такие две учетные записи не будут связаны, для имени нового пользователя будет просто добавлен суффикс _N, где вместо N будет подставлено число.
    • если связанный с учетной записью ВКонтакте пользователь есть, то будет использована найденная учетная запись.
  3. Выбранный пользователь авторизуется в системе.
  4. ВКонтакте не отдает адрес электронной почты, по этому модуль предлагает новому пользователю указать свой e-mail в настройках своего нового аккаунта.

Установка и настройка модуля

  1. Первым делом во ВКонтакте нужно создать приложение типа "Веб-сайт", для этого нужно перейти по ссылке: http://vkontakte.ru/pages.php?act=developers и нажать на кнопку "Подключить сайт".
  2. В настройках созданного приложения нужно указать адрес сайта (http://example.com/) и базовый домен (example.com), а также получить ID приложения и защищенный ключ, все эти четыре параметра нужно будет указать в настройках модуля vk_openapi.
  3. Теперь нужно скачать модуль, если вы этого еще не сделали, распаковать в папку sites/all/modules и включить его стандартными средствами Друпала.
  4. После активации модуля, на странице admin/settings/vk_openapi вы должны указать параметры созданного ранее приложения ВКонтакте.

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

  1. <div id="vk_login" class="vk_login" style="margin: 0 auto 20px auto;" onclick="doLogin();"></div>

который будет заменен на кнопку.

Я старался сделать этот модуль максимально простым для посетителей сайта — авторизоваться в системе можно всего одним кликом. Мне, например, сильно не нравится реализация Facebook Connect для Друпла тем, что после нажатия кнопки "Connect" пользователя заставляют еще заполнить некоторые поля в форме регистрации. По этому данные от ВКонтакте получаются только один раз, при первом входе в систему, и используются только имя и фамилия пользователя. Теоретически, эти данные можно периодически обновлять, также есть возможность получить данные о фотографиях пользователя и его аватарке, его друзьях изменениях статусов, связать логаут на Друпал-сайте с логаутом из ВКонтакте и т.п. Интересно знать нужен ли кому-нибудь подобный функционал или достаточно того, что уже есть сейчас?

164 Comments

Есть проект

Роман,
Я знаю вас как самого продвинутого друпал разработчика в России. Данный модуль - очередное подтверждение.
Хотел бы предложить вам работу - или на постоянной основе или на проектной.
Напишите мне, если будет интересно, я расскажу вам о компании и о том, что мы хотим сделать.

ошибка при авторизацции по кнопке через контактную форму

http://clip2net.com/s/LLMz -
выскакивает такое окно при авторизации -. в чем может быть причина ?

и еще вопрос :
http://clip2net.com/s/LLS7
о каком урле здесь идет речь ? урл после входа на сайт ? Или это должен быть урл профиля в контакте ? Неплохо было бы в комментариях к полю дать несколько слов пояснений. Заранее спасибо !

вот такая

вот такая проблема
http://s015.radikal.ru/i331/1102/8f/c3d9e6bba095.jpg

как решать?

Drupal 7

Хотелось бы увидеть обновление этого модуля для 7й версии Друпала

D7

[quote=Garik]Хотелось бы увидеть обновление этого модуля для 7й версии Друпала[/quote]

Да, Роман, есть ли какие-то планы по портированию на D7? Или может посоветуете какое-то более комплексное решение (кроме Loginza), где ВКонтакт будет доступен для логина наряду с другими соцсетями?

проверка на уже существующий e-mail

Большое спасибо за отличный нужный модуль.

Если включить опцию обязательного e-mail (Oblige users to enter e-mail.) то пользователь при регистрации может указать любой, даже уже существующий у пользователя друпала e-mail. Таким образом оба пользователя не смогут сохранить свой аккаунт - e-mail получается дублируется.

Также небольшой вопрос: а что даёт подтверждение адреса e-mail, которое приходит при регистрации?

Сорри, туплю, видимо тоже

Сорри, туплю, видимо тоже самое, что и при обыкновенной регистрации )

Роман, в какую сторону

Роман, в какую сторону копать: код преобразовывается в кнопку только на страничке /admin. во всех остальных местах (и в блоке, и в форме авторизации на главной сайта), он не преобразуется (внутри дива ничего не появляется).

hostinh nic.ru and vk api

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

Страницы