Разработал модуль для авторизации пользователей на Друпал-сайте с использованием ВКонтакте OpenAPI.
Скачать модуль можно на drupal.org. Демо работы модуля доступно тут: http://vktest.kece.ru. Там же находится и инструкция по его установке и настройке.
Возможности модуля:
- Авторизация на сайте с помощью учетной записи ВКонтакте. Из ВКонтакта подтягивается вся доступная информация о пользователе и его аватарка.
- Возможность добавить ко всем материалам кноп ку "Сохранить ВКонтакте"
- Простое добавление виджетов ВКонтакте (комментарии, группы, опросы и т.п.) в любые блоки или материалы на сайте.
Работа модуля
Логика работы модуля:
- после нажатия пользователем кнопки "войти вКонтакте" модуль получает необходимые данные от сервера вКонтакте.
- Далее модуль проверяет есть ли в базе данных Друпала пользователь, связанный с именем, полученным от вКонтакте:
- если его нет, то создается новый пользователь и связывается с 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 вы должны указать параметры созданного ранее приложения ВКонтакте.
Все, после выполнения этих действий к формам авторизации будет добавлена кнопка "войти вКонтакте" и пользователи смогут авторизоваться на вашем сайте с помощью учетных записей вКонтакте. При желании вы можете отключить вывод этой кнопки в формах авторизации, тогда в произвольное место страницы сайта нужно будет вставить код:
который будет заменен на кнопку.
Я старался сделать этот модуль максимально простым для посетителей сайта — авторизоваться в системе можно всего одним кликом. Мне, например, сильно не нравится реализация Facebook Connect для Друпла тем, что после нажатия кнопки "Connect" пользователя заставляют еще заполнить некоторые поля в форме регистрации. По этому данные от ВКонтакте получаются только один раз, при первом входе в систему, и используются только имя и фамилия пользователя. Теоретически, эти данные можно периодически обновлять, также есть возможность получить данные о фотографиях пользователя и его аватарке, его друзьях изменениях статусов, связать логаут на Друпал-сайте с логаутом из ВКонтакте и т.п. Интересно знать нужен ли кому-нибудь подобный функционал или достаточно того, что уже есть сейчас?
Disclaimer
Итак, с данного момента багрепорты типа "ничего не работает, помогите" игнорируются. Багрепорты связанные с некорректным отображением элементов в нестандартных темах оформления игнорируются, так как они легко локализуются Firebug'ом и исправляются правкой CSS. Рассматриваются только багрепорты с однозначным описанием проблемы: "включил модуль такой-то и перестала работать такая-то функция".
В случае с исчезновением кнопки share, проблема может быть из-за текста поста, по этому попробуйте создать тестовый пост, с 1 простым предложением и сохранить его, если кнопка в таком посте появилась, то продолжайте добавлять в него по 1-2 предложения из поста, в котором кнопка не появляется. В определенный момент она должна будет пропасть и в тестовом посте и тогда вы сможете разместить здесь строку, из-за которой кнопка share исчезает.
Комментарии
Почитайте тред про покупку логинзы на яндексе:
http://clubs.ya.ru/company/replies.xml?item_no=33492
еще вот
http://lucillekey.ya.ru/replies.xml?item_no=41438
http://dubrowsky.ya.ru/replies.xml?item_no=5776
Есть идеи почему после удаления user register notify все равно отсылаются уведомления о редактировании профиля когда юзер просто заходит по кнопке вконтакте?
Решил проблему удалив и заново установив модуль при этом отключив интеграцию
Есть вопрос.
Кнопочки "добавить вконтакте" появляются не у всех нод.
Подскажите что за причина или баг это?
Сайт http://braslavskie.by
Там в настройках можно выбрать типы материалов, в которых отображается кнопка, плюс нужно дать разрешение по ролям.
Не глупый такие вопросы писать. В настройках всё ВКЛЮЧЕНО
Человечное объяснение строк в цитате
Кнопка 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>
Обратите внимание какой код генерирует модуль. Наличие в ноде кавычек приводит к ошибкам.
Не глупый потому как эта функциональность прямиком растет из моего модуля http://drupal.ru/node/53739
Еще не плохо бы добавить кнопку войти на страницу "Регистрация", ведь если отправлять комменты могут только зарегистрированные пользователи, то пользователь видит надпись "Для комментирования войдите или зарегистрируйтесь" и жмет на "зарегистрируйтесь", а там форма регистрации, получается что может и не узнать что можно войти через Контакт.
«Первым делом во ВКонтакте нужно создать приложение типа "Веб-сайт", для этого нужно перейти по ссылке: http://vkontakte.ru/pages.php?act=developers и нажать на кнопку "Подключить сайт".»
Для одного аккаунта вконтакте можно подключить только один сайт?
Сам нашел ответ: Изменился адрес страницы подключения сайта: http://vkontakte.ru/developers.php?o=-1&p=Auth
Что-то не работает. Или вконтактовцы что-то изменили в api или я ничего не понимаю. Может быть, конечно какой-то модуль конфликтует, но при попытке авторизоваться выдает: Error connecting to vkontakte.ru server
Перед этим открывается вконтактовская страница такого содержания:
<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
Все делал так же как и на сайте, где авторизация работает. Отличаются почему-то интерфейсы настройки сайтов на вконтакте.
Подключается с полпинка, спасибо Ромке
Скорее ВКонтакте Microsoft переплюнет!
Да и автору респект.
А по делу..
Что нового в модуле??
Может интегрировать в него комменты ВК и "мне нравиться". Я сейчас просто в Блоки код впихнул.
Если вы о скриптах комментариев и "что нравится" это уже давно как работает
Сообщаю, что при использовании этого модуля после нажатия кнопки "Войти Вконтакте" у меня на сайте создается юзер с логином _1, и с аккаунта Вконтакте никакая информация не импортируется, кроме мейла вида [ID номер]vkontakte.ru.
С кнопкой, позволяющей поделиться страницей у себя Вконтакте, тоже были проблемы - показывалась не на всех страницах сайта. Поэтому я использовал модуль AddThis, и доволен.
после нажатия кнопки "Войти Вконтакте" у меня на сайте создается юзер с логином _1, и с аккаунта Вконтакте никакая информация не импортируется, кроме мейла вида [ID номер][user=vkontakte]vkontakte[/user].ru.
подскажите, пожалуйста, что с этим делать?
Такая же проблема. И еще после нажатия кнопки "Войти в контакте" выдает ошибку:
[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.
Всем доброго времени суток!
Прочитал ветку комментов! но не нашёл ни у кого такой проблемки:
1. Поставил модуль,включил vk_openapi и vk_share
2. Кнопка "Сохранить В" появляется на указанных страничках нормально, но при нажатии на неё происходит уход со страницы источника на сайт контакта, т.е. открывается отдельное окошко "Поделиться" и на странице где была кнопка нажата тоже происходит переход на "Поделиться"
Что за беда, в друпале недавно,сам не разберусь.Помогите ребят
Попробуйте отключить модуль google analytics (если он у вас установлен), очистить кеш и проверить, открывается ли по-прежнему в двух окнах эта ссылка (а также все другие ссылки, у которых указан target=_blank). У меня была аналогичная проблема со ссылками и, как оказалось, дело было в модуле google_analytics.
Да! действительно это оно,а жаль, мне нравится работа модуля google analytics! будем ждать исправления багов гугла, спасибо за помощь и верное направление!
Попробуйте установить dev-версию модуля google_analytics. Там изменён подгружаемый JS-код и в моём случае это дало положительный результат.
Отлично! спасибо за помощь, мне помогло!
Здорово Я рад.
Хороший модуль.. по описанию.. А для 7 версии друпала нет?
Даешь модуль для Dripal 7 ?
Этот модуль необходимо портировать на Drupal 7 !
уже работаем
Добрый день!
Классный модуль! Спасибо большое!
Но на некоторых хостингах в php.ini выключают allow_url_fopen
что приводит к ошибке работы этого модуля
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×tamp=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.
Можно ли адаптировать модуль на такие хосты?
Это радует!
Тестовый сайт http://vktest.kece.ru/ не "авторизовывает"... модуль перестал работать?
У меня авторизовывает (старую учетку).
не авторизовывает аналогично
если для работы модуля, нужно отключать кеш , то это не модуль...
Капча отключает кэш на страницах, где она отображается. Это нормально и зависит от специфики модуля. Кэш на всём сайте отключать не обязательно.
Domain access насколько мне известно вообще отрубает кэш на всем сайте.
Смысл в том что они работает, но плохо очень. Из 5 учеток лишь 1 смогла пройти авторизацию =((.
А у кого как с этим?
Выскакивает ошибка "Error connecting to vkontakte.ru server"
Подскажите как еще решить? перешерстил всю ветку так не нашел ответа (
У меня странно работает данный модуль: если юзер залогинен в ВК, то вход с помощью данного модуля не производится — окно с allow проскакивает, причём, что самое интересное, если юзер не залогинен в ВК, то модуль работает: происходит вход в систему.
Не подскажите, в чём может быть проблема?
Посмотреть своими глазами можно тут: http://www.sportion.ru/user
Доп. инфа:
хостинг: ТаймВеб
PHP: 5.2.12
Мейлрушный модуль работает.
Огромная благодарность автору модуля!
не логинется с данной кнопки, окошко вылазиет и сразу закрывается...
Модуль отличнейший, заработал сразу и без косяков. Маленько колупнул ядро (нужно будет в свой модуль перенести) и даже список друзей вытащил. И все-таки небольшая дурацкая проблема - в хидере два раза пишет путь к openapi.js (уже писали, извиняюсь, может ответ просмотрел)
<script type="text/javascript" src="http://userapi.com/js/api/openapi.js?1"></script>
и у людей кнопка расшарить не выводится, зато у меня выводится в блоке аж два раза, одна под другой, и обе работают независимо! Маразм какой-то (у меня). Использую код
<!--
document.write(VK.Share.button({
url: 'http://mysite.com',
title: 'Заголовок сайта',
description: 'Это описание, и из-за API VKontakte вижу его только я',
noparse: false},
{type: 'round', text: 'Поделиться'}
));
-->
</script>
респект автору!
Спасибо выручили.
Вероятно стоит скооперировать усилия с http://drupal.org/project/vkxp
Ромке спасибо хороший модуль - работает как часики. Хотя сам я этих вконтакте и фейсбуке не пользую - но спрос есть - как ни странно. Полный бред эти сети. Они еще из моды не вышли?
вышли давно, щас модно гостевые книги и списки рассылок
Не знал. Я на Ютюбе тусуюсь.
Мне думается андед пошутил
Правильно! Надо делать авторизацию через учётку на ютубе!
ЖЖ было бы неплохо прикрутить.
А если использовать виджет комментариев вконтакте то блок комментариев будет задваиваться?
Если разместить виджет под материалом, то под ним еще будет штатные комментарии друпал.
Непонятно как это будет выглядеть? Будут коментарии штатные и коментарии тех кто их сделал через виджет?
Если бы можно было залогиниться через вк а затем комментировать через штатные комментарии друпал, но при этом была бы функция как в виджете - поставить галочку "разместить у себя на стене коментарий"
subscribe
Может наоборот - пусть они сами к семерке прикручиваются))
Интересуют две вещи:
1. Как вставить кнопку в нужное место (рядом с "Войдите, чтобы отправить комментарий")?
2. Можно ли сделать после регистрации сделать редирект на страницу, на которой была нажата кнопка?
Респект автору. Ромка, а как его портировать на пятерку? Очень надо Понимаю, что старая версия но апгрейтить пятерку с сильно пофиксенным ядром практически не реально. Пожалуйста.
Здравствуйте!
Установил данный модуль, радостно, что все работает, но вот одно но...
Для меня важно чтобы при регистрации на сайте все письма с сайта отсылались от имени одного и того же почтового ящика, так и было до установки модуля.
Но теперь все по прежнему, но почему-то при регистрации через данный модуль, "приветственные письма о успешной регистрации" стали приходить с почты, зарегистрированной на хостинге, в соответственно в логине которой находится имя учетной записи и и наименование самого хостинга (т.е. логин@хостинг.ru), что само по себе не очень хорошо.
Подскажите, пожалуйста, как эту ситуацию можно исправить, где что надо изменить?
Заранее, с благодарностью!
.
Здравствуйте!
Установил Ваш модуль. Сначала все работало отлично, потом перестало. Нажимаю на кнопку "Войти вконтакте", выпрыгивает окно на одну секунду и возвращается в исходной странице, то есть ничего не происходит полезного и на сайт не заходит. В firebug-е пишет: "open api access error"
Вроде нашел в чем дело. Кто столкнется - обращайтесь.
Так почему бы сразу не описать здесь решение?
Отлично работает и сразу, спасибо. здесь
Прошло больше недели - полет нормальный. Только желающих залогинеться маловато (но есть парочка) из вконтакта. Заходят, смотрят, а потом у себя в соц.сети "балаган" разводят.
сколько не бился с модулем, а все равно ошибка auth error[1]. очень жаль:(
Действительно, ошибка auth error[1] периодически вылетает. Не нашел решение. Похоже. зависит как-то от настроек безопасности пользователя либо от ОС. На моих компьютерах под линукс без проблем авторизуется. под виндой ошибка. Поставил оповещение по почте, когда при попытке авторизации выскакивает у пользователей эта ошибка. Получилось примерно 10% авторизаций не срабатывают.
модуль создает учетную запись, но юзер не логинится, а так же введеенный e-mail пропадает, вместо него подставляется значение xxxxxxxx@vkontakte.ru, где xxxxxxxx - id учетки в вконтакте. подскажите, если кто сталкивался с подобными проблемами
UPD: если убираю "Oblige users to enter e-mail", то авторегистрация и автологин проходят успешно. Осталось понять, почему записывается неправильно e-mail.
Модуль офигенный. Вот бы баги все поисправлять.
Я установил рекомендованную версию, проверил с Хрома. Выдало ошибки. Приложил на скринах
Можно ли как-то сделать такое правило в rules:
если пользователь вступил в группу с таким-то id, показать такой-то блок?