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

Главные вкладки

Аватар пользователя Ромка Ромка 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 исчезает.

Комментарии

Аватар пользователя Aurochs@drupal.org Aurochs@drupal.org 31 января 2011 в 17:51

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

Аватар пользователя seaji seaji 3 февраля 2011 в 21:50

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

Аватар пользователя ciberlex404 ciberlex404 3 февраля 2011 в 22:23

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

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

Аватар пользователя ciberlex404 ciberlex404 3 февраля 2011 в 22:46

"Ромка" 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>

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

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 5 февраля 2011 в 0:44

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

Аватар пользователя kpv_dnepr@drupal.org kpv_dnepr@drupal.org 6 февраля 2011 в 17:45

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

Аватар пользователя ivcons ivcons 9 февраля 2011 в 9:44

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

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

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

Аватар пользователя ivcons ivcons 9 февраля 2011 в 11:17

Что-то не работает. Или вконтактовцы что-то изменили в 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

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

Аватар пользователя ciberlex404 ciberlex404 27 февраля 2011 в 12:28

"Ламер" wrote:

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

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

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

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

Аватар пользователя afishi afishi 13 марта 2011 в 0:33

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

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

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

Аватар пользователя kust kust 12 марта 2011 в 22:25

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

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

Аватар пользователя kust kust 13 марта 2011 в 8:57

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

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

Аватар пользователя dima.iluschenko dima.iluschenko 16 марта 2011 в 16:15

Такая же проблема. И еще после нажатия кнопки "Войти в контакте" выдает ошибку:
[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.

Аватар пользователя archimeds archimeds 22 марта 2011 в 17:58

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

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 23 марта 2011 в 17:47

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

Аватар пользователя archimeds archimeds 23 марта 2011 в 18:14

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

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 25 марта 2011 в 1:17

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

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

Аватар пользователя archimeds archimeds 25 марта 2011 в 20:13

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

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

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

Добрый день!

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

Но на некоторых хостингах в 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.

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

Аватар пользователя Dan Dan 14 июня 2011 в 14:09

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

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

Аватар пользователя aksernar aksernar 14 июня 2011 в 20:30

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

Аватар пользователя nuwak nuwak 20 июля 2011 в 19:14

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

Аватар пользователя garA02 garA02 31 июля 2011 в 22:01

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

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

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

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

Аватар пользователя yustos.com yustos.com 2 сентября 2011 в 14:48

Модуль отличнейший, заработал сразу и без косяков. Маленько колупнул ядро (нужно будет в свой модуль перенести) и даже список друзей вытащил. И все-таки небольшая дурацкая проблема - в хидере два раза пишет путь к 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>
Аватар пользователя DDDDD099 DDDDD099 4 октября 2011 в 22:13

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

Аватар пользователя Dan Dan 5 октября 2011 в 9:44

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

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

Аватар пользователя haver haver 17 октября 2011 в 21:09

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

Аватар пользователя Alex_on Alex_on 29 января 2012 в 11:38

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

Аватар пользователя Urfin Urfin 20 февраля 2012 в 11:12

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

Аватар пользователя Антон Ш Антон Ш 1 июля 2012 в 20:09

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

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

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

Аватар пользователя stillfinder stillfinder 10 ноября 2015 в 11:48

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

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

Аватар пользователя kardinal kardinal 17 сентября 2012 в 20:51

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

Аватар пользователя Koder Koder 18 сентября 2012 в 20:40

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

Аватар пользователя alex_ti alex_ti 18 сентября 2012 в 11:52

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

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

Аватар пользователя Sadchenko Sadchenko 10 ноября 2015 в 11:48

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

Аватар пользователя meloff meloff 14 сентября 2014 в 2:56

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