Модуль для авторизации с использованием учетной записи ВКонтакте

17 мая 2010 в 11:09

Разработал модуль для авторизации пользователей на Друпал-сайте с использованием ВКонтакте OpenAPI.

Скачать модуль можно на drupal.org. Демо работы модуля доступно тут: http://vktest.kece.ru. Там же находится и инструкция по его установке и настройке.

Возможности модуля:

  1. Авторизация на сайте с помощью учетной записи ВКонтакте. Из ВКонтакта подтягивается вся доступная информация о пользователе и его аватарка.
  2. Возможность добавить ко всем материалам кноп ку "Сохранить ВКонтакте"
  3. Простое добавление виджетов ВКонтакте (комментарии, группы, опросы и т.п.) в любые блоки или материалы на сайте.

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

Логика работы модуля:

  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 вы должны указать параметры созданного ранее приложения ВКонтакте.

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

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

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

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

Disclaimer

Итак, с данного момента багрепорты типа "ничего не работает, помогите" игнорируются. Багрепорты связанные с некорректным отображением элементов в нестандартных темах оформления игнорируются, так как они легко локализуются Firebug'ом и исправляются правкой CSS. Рассматриваются только багрепорты с однозначным описанием проблемы: "включил модуль такой-то и перестала работать такая-то функция".

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

Комментарии

Есть идеи почему после удаления user register notify все равно отсылаются уведомления о редактировании профиля когда юзер просто заходит по кнопке вконтакте?

31 января 2011 в 17:51

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

3 февраля 2011 в 21:50

"seaji" wrote:
Там в настройках можно выбрать типы материалов, в которых отображается кнопка, плюс нужно дать разрешение по ролям.

Не глупый такие вопросы писать. В настройках всё ВКЛЮЧЕНО

3 февраля 2011 в 22:23

"Ромка" wrote:
В случае с исчезновением кнопки share, проблема может быть из-за текста поста, по этому попробуйте создать тестовый пост, с 1 простым предложением и сохранить его, если кнопка в таком посте появилась, то продолжайте добавлять в него по 1-2 предложения из поста, в котором кнопка не появляется. В определенный момент она должна будет пропасть и в тестовом посте и тогда вы сможете разместить здесь строку, из-за которой кнопка share исчезает.

Человечное объяснение строк в цитате

Кнопка share содержит в себе часть текста самой ноды(или весь, я не разбирался).
В моём случае в тексте ноды были символы " Замена quot; не помогла. Убрал символы ""
         <a href="/news/2011-01-28/11-fevralya-v-braslavskom-muzee-traditsionnoi-kultury-sostoitsya-otkrytie-vystavki-n" class="imagecache imagecache-image-120x120 imagecache-linked imagecache-image-120x120_linked"><img src="http://braslavskie.by/sites/default/files/imagecache/image-120x120/news/news_remesla11.jpg" alt="Открытие выставки Народный костюм Западной Витебщины" title="Открытие выставки Народный костюм Западной Витебщины"  class="imagecache imagecache-image-120x120" width="90" height="120" /></a>

Обратите внимание какой код генерирует модуль. Наличие в ноде кавычек приводит к ошибкам.

3 февраля 2011 в 22:46

"seaji" wrote:
Не глупый потому как эта функциональность прямиком растет из моего модуля http://drupal.ru/node/53739[/quote]
Думаю, там и не подразумевался знак вопроса. Человек хотел сказать, что он не глупый, чтобы писать вопросы, предварительно не проверив соответствующие настройки.

5 февраля 2011 в 0:44

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

6 февраля 2011 в 17:45

«Первым делом во ВКонтакте нужно создать приложение типа "Веб-сайт", для этого нужно перейти по ссылке: http://vkontakte.ru/pages.php?act=developers и нажать на кнопку "Подключить сайт".»

Для одного аккаунта вконтакте можно подключить только один сайт?

Сам нашел ответ: Изменился адрес страницы подключения сайта: http://vkontakte.ru/developers.php?o=-1&p=Auth

9 февраля 2011 в 9:44

Что-то не работает. Или вконтактовцы что-то изменили в api или я ничего не понимаю. Может быть, конечно какой-то модуль конфликтует, но при попытке авторизоваться выдает: Error connecting to vkontakte.ru server

Перед этим открывается вконтактовская страница такого содержания:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" id="vkontakte">
<head>
<script type="text/javascript">
window.close();
</script>
</head>
<body>
</body>
</html>

Естественно автоматически закрывается - страница моего сайта обновляется и выводит ошибку Error connecting to vkontakte.ru server

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

9 февраля 2011 в 11:17

"Ламер" wrote:

Блин, Ромка, ты такой мощно-мудрый человечище, наверняка в своё время била гейтса переплюнешь.
будет своя империя - не забудь меня взять, бюджеты осваивать на маркетинг

Скорее ВКонтакте Microsoft переплюнет! Smile
Да и автору респект.

А по делу..
Что нового в модуле??

Может интегрировать в него комменты ВК и "мне нравиться". Я сейчас просто в Блоки код впихнул.

27 февраля 2011 в 12:28

ciberlex404][quote="Ламер" wrote:

Может интегрировать в него комменты ВК и "мне нравиться". Я сейчас просто в Блоки код впихнул.

Если вы о скриптах комментариев и "что нравится" это уже давно как работает

13 марта 2011 в 0:33

Сообщаю, что при использовании этого модуля после нажатия кнопки "Войти Вконтакте" у меня на сайте создается юзер с логином _1, и с аккаунта Вконтакте никакая информация не импортируется, кроме мейла вида [ID номер]vkontakte.ru.

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

12 марта 2011 в 22:25

после нажатия кнопки "Войти Вконтакте" у меня на сайте создается юзер с логином _1, и с аккаунта Вконтакте никакая информация не импортируется, кроме мейла вида [ID номер][user=vkontakte]vkontakte[/user].ru.

подскажите, пожалуйста, что с этим делать?

13 марта 2011 в 8:57

Такая же проблема. И еще после нажатия кнопки "Войти в контакте" выдает ошибку:
[function.file-get-contents]: failed to open stream: Operation not permitted in /usr/home/mlendby/domains/inspeckom.ru/public_html/sites/all/modules/contribute/vk_openapi/vkapi.class.php on line 40.

16 марта 2011 в 16:15

Всем доброго времени суток!
Прочитал ветку комментов! но не нашёл ни у кого такой проблемки:
1. Поставил модуль,включил vk_openapi и vk_share
2. Кнопка "Сохранить В" появляется на указанных страничках нормально, но при нажатии на неё происходит уход со страницы источника на сайт контакта, т.е. открывается отдельное окошко "Поделиться" и на странице где была кнопка нажата тоже происходит переход на "Поделиться"
Что за беда, в друпале недавно,сам не разберусь.Помогите ребят

22 марта 2011 в 17:58

Попробуйте отключить модуль google analytics (если он у вас установлен), очистить кеш и проверить, открывается ли по-прежнему в двух окнах эта ссылка (а также все другие ссылки, у которых указан target=_blank). У меня была аналогичная проблема со ссылками и, как оказалось, дело было в модуле google_analytics.

23 марта 2011 в 17:47

Да! действительно это оно,а жаль, мне нравится работа модуля google analytics! будем ждать исправления багов гугла, спасибо за помощь и верное направление!

23 марта 2011 в 18:14

"archimeds" wrote:
Да! действительно это оно,а жаль, мне нравится работа модуля google analytics! будем ждать исправления багов гугла, спасибо за помощь и верное направление!

Попробуйте установить dev-версию модуля google_analytics. Там изменён подгружаемый JS-код и в моём случае это дало положительный результат.

25 марта 2011 в 1:17

"<a href="mailto:ingumsky@drupal.org">ingumsky@drupal.org</a>" wrote:
Попробуйте установить dev-версию модуля google_analytics. Там изменён подгружаемый JS-код и в моём случае это дало положительный результат.

Отлично! спасибо за помощь, мне помогло!

25 марта 2011 в 20:13

Добрый день!

Классный модуль! Спасибо большое!

Но на некоторых хостингах в php.ini выключают allow_url_fopen
что приводит к ошибке работы этого модуля

warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in /.../sites/all/modules/vk_openapi/vkapi.class.php on line 40.
warning: file_get_contents(http://api.vk.com/api.php?api_id=2368981&fields=nickname%2Csex%2Cbdate%2Ccity%2Ccountry%2Ctimezone%2Cphoto%2Cphoto_medium%2Cphoto_big%2Chas_mobile%2Crate%2Ccontacts%2Ceducation%2Chome_phone%2Cmobile_phone%2Cuniversity%2Cuniversity_name%2Cfaculty%2Cfaculty_name%2Cgraduation&format=json&method=getProfiles&random=4064&timestamp=1307346017&uids=138407184&v=3.0&sig=608d89a5e95ab97ba4b21d6d56d45655) [function.file-get-contents]: failed to open stream: no suitable wrapper could be found in /.../sites/all/modules/vk_openapi/vkapi.class.php on line 40.

Можно ли адаптировать модуль на такие хосты?

6 июня 2011 в 13:51
Аватар пользователя Dan Dan 0

"aksernar" wrote:
если для работы модуля, нужно отключать кеш , то это не модуль...

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

14 июня 2011 в 14:09

Смысл в том что они работает, но плохо очень. Из 5 учеток лишь 1 смогла пройти авторизацию =((.
А у кого как с этим?

14 июня 2011 в 20:30

Выскакивает ошибка "Error connecting to vkontakte.ru server"
Подскажите как еще решить? перешерстил всю ветку так не нашел ответа (

20 июля 2011 в 19:14

У меня странно работает данный модуль: если юзер залогинен в ВК, то вход с помощью данного модуля не производится — окно с allow проскакивает, причём, что самое интересное, если юзер не залогинен в ВК, то модуль работает: происходит вход в систему.

Не подскажите, в чём может быть проблема?

Посмотреть своими глазами можно тут: http://www.sportion.ru/user

Доп. инфа:
хостинг: ТаймВеб
PHP: 5.2.12
Мейлрушный модуль работает.

31 июля 2011 в 22:01

Модуль отличнейший, заработал сразу и без косяков. Маленько колупнул ядро (нужно будет в свой модуль перенести) и даже список друзей вытащил. И все-таки небольшая дурацкая проблема - в хидере два раза пишет путь к openapi.js (уже писали, извиняюсь, может ответ просмотрел)

<script type="text/javascript" src="http://userapi.com/js/api/openapi.js?1"></script>
<script type="text/javascript" src="http://userapi.com/js/api/openapi.js?1"></script>

и у людей кнопка расшарить не выводится, зато у меня выводится в блоке аж два раза, одна под другой, и обе работают независимо! Маразм какой-то (у меня). Использую код

<script type="text/javascript">
<!--
document.write(VK.Share.button({
  url: 'http://mysite.com',
  title: 'Заголовок сайта',
  description: 'Это описание, и из-за API VKontakte вижу его только я',
  noparse: false},
{type: 'round', text: 'Поделиться'}
));
-->
</script>
2 сентября 2011 в 14:48

Ромке спасибо хороший модуль - работает как часики. Хотя сам я этих вконтакте и фейсбуке не пользую - но спрос есть - как ни странно. Полный бред эти сети. Они еще из моды не вышли?

4 октября 2011 в 22:13
Аватар пользователя Dan Dan 0

"DDDDD099" wrote:
Не знал. Я на Ютюбе тусуюсь.

Правильно! Надо делать авторизацию через учётку на ютубе!

5 октября 2011 в 9:44

А если использовать виджет комментариев вконтакте то блок комментариев будет задваиваться?
Если разместить виджет под материалом, то под ним еще будет штатные комментарии друпал.
Непонятно как это будет выглядеть? Будут коментарии штатные и коментарии тех кто их сделал через виджет?
Если бы можно было залогиниться через вк а затем комментировать через штатные комментарии друпал, но при этом была бы функция как в виджете - поставить галочку "разместить у себя на стене коментарий"

17 октября 2011 в 21:09

Интересуют две вещи:
1. Как вставить кнопку в нужное место (рядом с "Войдите, чтобы отправить комментарий")?
2. Можно ли сделать после регистрации сделать редирект на страницу, на которой была нажата кнопка?

29 января 2012 в 11:38

Респект автору. Ромка, а как его портировать на пятерку? Очень надо Smile Понимаю, что старая версия но апгрейтить пятерку с сильно пофиксенным ядром практически не реально. Пожалуйста.

20 февраля 2012 в 11:12

Здравствуйте!

Установил данный модуль, радостно, что все работает, но вот одно но...
Для меня важно чтобы при регистрации на сайте все письма с сайта отсылались от имени одного и того же почтового ящика, так и было до установки модуля.
Но теперь все по прежнему, но почему-то при регистрации через данный модуль, "приветственные письма о успешной регистрации" стали приходить с почты, зарегистрированной на хостинге, в соответственно в логине которой находится имя учетной записи и и наименование самого хостинга (т.е. логин@хостинг.ru), что само по себе не очень хорошо.
Подскажите, пожалуйста, как эту ситуацию можно исправить, где что надо изменить?

Заранее, с благодарностью!

1 июля 2012 в 20:09

Здравствуйте!
Установил Ваш модуль. Сначала все работало отлично, потом перестало. Нажимаю на кнопку "Войти вконтакте", выпрыгивает окно на одну секунду и возвращается в исходной странице, то есть ничего не происходит полезного и на сайт не заходит. В firebug-е пишет: "open api access error"

Вроде нашел в чем дело. Кто столкнется - обращайтесь.

10 ноября 2015 в 11:48

Прошло больше недели - полет нормальный. Только желающих залогинеться маловато (но есть парочка) из вконтакта. Заходят, смотрят, а потом у себя в соц.сети "балаган" разводят.

17 сентября 2012 в 20:51

Действительно, ошибка auth error[1] периодически вылетает. Не нашел решение. Похоже. зависит как-то от настроек безопасности пользователя либо от ОС. На моих компьютерах под линукс без проблем авторизуется. под виндой ошибка. Поставил оповещение по почте, когда при попытке авторизации выскакивает у пользователей эта ошибка. Получилось примерно 10% авторизаций не срабатывают.

18 сентября 2012 в 20:40

модуль создает учетную запись, но юзер не логинится, а так же введеенный e-mail пропадает, вместо него подставляется значение xxxxxxxx@vkontakte.ru, где xxxxxxxx - id учетки в вконтакте. подскажите, если кто сталкивался с подобными проблемами

UPD: если убираю "Oblige users to enter e-mail", то авторегистрация и автологин проходят успешно. Осталось понять, почему записывается неправильно e-mail.

18 сентября 2012 в 11:52

Модуль офигенный. Вот бы баги все поисправлять.
Я установил рекомендованную версию, проверил с Хрома. Выдало ошибки. Приложил на скринах

10 ноября 2015 в 11:48

Можно ли как-то сделать такое правило в rules:
если пользователь вступил в группу с таким-то id, показать такой-то блок?

14 сентября 2014 в 2:56