Вы находитесь на устаревшей версии сайта 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

Здраствуйте! Спасибо за

Здраствуйте! Спасибо за скрипт! Но у меня есть вопрос! Можно ли как нибудь скрипт заставить работать на nginx ?? я всё на друпал настроил и когда нажимаю войти вконтакте то 404 ошибка! может подскажите что где изменить??

Open API security breach

Пока что во всплывающем окне выводится сообщение об ошибке: Open API security breach. Есть идеи с чем это может быть связано?

Настройки модуля:

Адрес сайта: http://freeflight.ru
Базовый домен: freeflight.ru

Ромка аватар

Хмм... у меня страница

Хмм... у меня страница настройки приложения во ВКонтакте выглядит не так как на вашем скриншоте. Вы уверены, что создали приложение типа "сайт"? Вот тут: http://vkontakte.ru/developers.php справа вверху надо нажать "Подключить сайт".

Роман , а не могли бы вы привести пример правильных настроек ?

Очень хочется задействовать Ваш модуль на сайте , а не получается по причине , указанной выше. Могли бы вы привести пример правильнх настроек - вконтакте и соотвествующие - на сайте друпал ? Заранее признателен.

Open API security breach

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

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

Однако auth error[2] не дает нормально жить по прежнему. ПАМАГИТЕ! :)

Ромка аватар

В ближайшее время эта ошибка

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

Ромка аватар

Quote:ответе пожалуйста на

[quote]ответе пожалуйста на мой вопрос.
Ждать ли устранения ошибки или отказываться от модуля?
[/quote]
[quote]При входе на друпал не создается запись для форума phpBB. Пишет bad nickname. В друпале user нормально функционирует.[/quote]
Это сторонние модули, с ними я интеграцию не предусматривал. Не уверен что в ближайшее время у меня найдется время чтобы сделать такую интеграцию.

ошибка

всё сделал по инструкции. после нажатия на кнопку выдаёт: ошибка авторизации.

пробовалось с нескольких компьютеров. установлено всё по инструкции. помогите, пожалуйста

Предложение по доработке

Предложение по доработке модуля

Было бы хорошо как то настраивать отражение кнопки.
точнее настроить в каком месте блока авторизации и как она появится.

Кстати у меня тоже проблема с /vk/xd_receiver.html
Но у меня прикручен IIRF и я быстро дописал в ini строчку
RewriteRule ^/vk/(.*)$ /index.php?q=vk/$1 и решил эту проблему

ответьте на мой вопрос

ответьте на мой вопрос пожалуста! ! Можно ли как нибудь скрипт заставить работать на nginx ?? я всё на друпал и вконтакте настроил и когда нажимаю войти вконтакте на сайте то 404 ошибка! может подскажите что где изменить??

при входе на сайте

при входе на сайте получил:

  1. * warning: fopen(files/pictures/b_531095f8.jpg) [function.fopen]: failed to open stream: Permission denied in /var/www/php-projects/romka.eu/sites/all/modules/vk_openapi/vk_openapi.module on line 451.
  2. * warning: fwrite(): supplied argument is not a valid stream resource in /var/www/php-projects/romka.eu/sites/all/modules/vk_openapi/vk_openapi.module on line 452.
  3. * warning: fclose(): supplied argument is not a valid stream resource in /var/www/php-projects/romka.eu/sites/all/modules/vk_openapi/vk_openapi.module on line 453.

Ромка аватар

Эта ошибка возникает если вы

Эта ошибка возникает если вы не авторизовались во ВКонтакте. Точнее, если модуль не может найти у вас куку, оставленную вконтактом. Куки в браузере включены?

Error connecting to server.

здравствуйте установил ваш модуль но вот ошибка в сплывающем окне:
Error connecting to server.
Скажите где я накосячил.

Да вот еще!

* warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in /home/nalivalkin/sch.su/docs/sites/all/modules/vk_openapi/vkapi.class.php on line 40.
* warning: file_get_contents(http://api.vk.com/api.php?api_id=1962827&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=2877&timestamp=1285142109&uids=98992120&v=3.0&sig=7afc7dcdfd7d327c826ba72ce3b88bcc) [function.file-get-contents]: failed to open stream: no suitable wrapper could be found in /home/nalivalkin/sch.su/docs/sites/all/modules/vk_openapi/vkapi.class.php on line 40.
* warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in /home/nalivalkin/sch.su/docs/sites/all/modules/vk_openapi/vkapi.class.php on line 40.
* warning: file_get_contents(http://api.vk.com/api.php?api_id=1962827&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=6665&timestamp=1285142256&uids=98992120&v=3.0&sig=5e020a985ae5a40c790175bc9ac19900) [function.file-get-contents]: failed to open stream: no suitable wrapper could be found in /home/nalivalkin/sch.su/docs/sites/all/modules/vk_openapi/vkapi.class.php on line 40.

drupal пишет после входа на сайт под своим логином.

Ромка аватар

У вас случайно не установлен

У вас случайно не установлен модуль login_destination? Если да, то это из-за него "Error connecting to server" и исправить эту ошибку можно или выключив модуль, или попросив автора модуля исправить в нем ошбки в логике, из-за которых редирект срабатывает вне зависимости от способа авторизации.

По второй ошибке. Тут же ясно написано: "URL file-access is disabled in the server configuration". В Гугле на эту тему куча советов. Если это ваш собственный сервер, то в php.ini надо прописать "allow_url_fopen on" или, если это шаред хостинг, то можно попробовать в .htaccess прописать "php_value allow_url_fopen on". Если оба способа не сработают, то надо попросить хостера включить эту опцию. Или сменить хостинг.

Какие еще сторонние модули могут конфликтовать?

[quote=Ромка]У вас случайно не установлен модуль login_destination? Если да, то это из-за него "Error connecting to server" и исправить эту ошибку можно или выключив модуль, или попросив автора модуля исправить в нем ошбки в логике, из-за которых редирект срабатывает вне зависимости от способа авторизации.
[/quote]
Нет login_destination у меня не установлен, какие еще сторонние модули могут конфликтовать?

Со второй ошибкой справился Спасибо.

Ромка аватар

Не знаю. Напишите список

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

список включенных модулей на сайте

[quote=Ромка]Не знаю. Напишите список нестандартных установленных модулей, в свободное время посмотрю, кто из них может мешать работе моего модуля.[/quote]
вот список включенных модулей на сайте
CCK
FileField
ImageField
ctools
privatemsg
panels
keywords
captcha
cumulus
hidden_captcha
hidden_image_captcha
imce
bueditor
SAPE
site_map

Ромка аватар

Тогда у меня идей нет. Нужно

Тогда у меня идей нет. Нужно больше информации. Эта ошибка возникает в 2 случаях:
1. вы не смогли авторизоваться ВКонтакте (вконтактовское окошко с запросом авторизации выскакивает?). Это значит, что вам надо разбираться с настройками приложения ВКонтакте
2. какой-то модуль не дает завершить работу моему модулю, я знаю о таком поведении модуля login_destination, но возможно какой-то еще модуль может мешать работе.

модуль аля login_destination

[quote=Ромка]модуль login_destination? Если да, то это из-за него "Error connecting to server" и исправить эту ошибку можно или выключив модуль, или попросив автора модуля исправить в нем ошбки в логике, из-за которых редирект срабатывает вне зависимости от способа авторизации.
[/quote]

А не подскажите примерно как исправить?
какое условие поставить. У меня стоит примерно такой же модуль - который использует редирект (нужно для установки куков на другом домене.)

Пришлось решать проблему так:

  1. function vk_openapi_login() {
  2. session_start();
  3. $_SESSION['vk']='1';
  4.  
  5. $member = authOpenAPIMember();

В другом скрипте проверять

  1. if ($_SESSION['vk'] != 1)

и не делать редирект

Если есть более изяшное и правильное решение Подскажите.

Error connecting to server vk_openapi

Нужно включить в апаче модуль rewrite и в друпале чистые ссылки.
После этого все начинает работать...
http://ged.korshunov.ru/content/%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BD%D0%B0-%D1%81%D0%B0%D0%B9%D1%82%D0%B5-%D0%BF%D0%BE%D0%B4-drupal-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-%D0%B2%D0%BA%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82

Надеюсь кому-нибудь время сэкономит. Сам потратил на поиски несколько часов.

доработка модуля

Не плохо бы встроить возможность указывать пользователям свой ай ди контакта и потом авторизовываться через него.

номер лучше сделать не редактируемым - и автоматически вставлять - после нажатия на кнопку типо "Получить номер в контакте"

Рома, огромное спасибо за

Рома, огромное спасибо за этот модуль! Работает, как часы.
Если facebook connect такой нехороший, может есть желание сделать такой-же для фэйсбука? Думаю, что с таким опытом, написание не составит труда. А нам будет очень приятно :)

Разобрался. при вводе айди

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

warning: mail(): Bad parameters to mail() function, mail not sent. in /var/hsphere/local/home/id0790/сайт/includes/mail.inc on line 193.

Email Registration

Добрый день. Есть замечательный модуль в друпале "Email Registration". Он ползволяет производить регистрацию и авторизацию только по мылу. Тоесть есть некоторое сходство с контактом где пользователю для аунтефикации предлагают ввести маил. Так вот суть вопроса.... после того как пользователь вошел на сайт через контакт ему создается уч. запись и потом на его странице предлагается связать уже существующею запись на сайте с его только что созданой(или просто привязать запись контакта к записи на сайте) или что-то в том роде. Для этого предлагается ввести ЮЗЕР нейм и пароль. Было бы неплохо сделать так что если установлен Email Registration тогда предлается при связи акаунта ввод не юзернайм а майл.

Спасибо! все настроил за

Спасибо! все настроил за полчаса... единственно чет перевод не пошел у меня.... выдал такой эррор
"Файл перевода ru.po содержит ошибку: невозможно обработать формулу множественных чисел."

Анонимность

Роман, извините за оффтоп, но вопросик назрел.
Читал вашу статью о том, как создать сеть типа хабры и другие полезные статьи, за них спасибо.
Однако вот вопрос... А есть ли возможность на друпале сделать так, чтобы было всего 2 коллективных блога, причем в один из которых могли бы писать анонимы?

Ромка аватар

Можно. Самый просто способ:

Можно. Самый простой способ: создать два типа контента к одному дать доступ на создание только авторизованным юзерам, другому — всем. Фильтровать с помощью Views.

Подскажите пожалуйста, как

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

window.vkAsyncInit = function() {
VK.init({
apiId: 1887216,
nameTransportPath: "/vk/xd_receiver",
status: true
});

$('.vk_login').each(
function(i) {
elid = $(this).attr('id');
VK.UI.button(elid);
el = document.getElementById(elid);
}
);

$('.vk_login tr td:nth-child(2) div div').html('Войти');
$('.vk_login tr td:nth-child(4) div div').html('Контакте');
};

(function() {
var el = document.createElement("script");
el.type = "text/javascript";
el.charset = "windows-1251";
el.src = "http://vkontakte.ru/js/api/openapi.js";
el.async = true;
document.getElementById("vk_api_transport").appendChild(el);
}());

Как бы его убрать для мобильной темы, но оставить для основной?

Здравствуйте, спасибо за ваш

Здравствуйте, спасибо за ваш труд -)

Вроде сделал все правильно, но после ввода данных выдает

auth error [1]

Если после этого зайти вконтакт, то там авторизация есть, куки так же нашел, пробовал в 2 браузерах.

Что может быть?

напиши как настроить плагин

нужна инструкция для чайников,

Application ID: тут вроде понятно

Secret key: ?

Redirect URL: ?

рег пользователя

есть ли какая защита от регистрации пользователя?
то есть можно ли запретить рег пользователем под тем же ником в течении суток.

иногда создается 2-3 одинаковых учетных записи типо ФИО_1 ФИО_2 ФИО_3

da100let.dn.ua

da100let.dn.ua www.sberbank-ucl.ru www.cvc09.ru www.ma-com.ru car-image.ru www.pcs-service.ru www.i-did-it.ru www.nationalmedicine.ru www.map-soft.ru www.realestatereview.ru www.rutop100.ru coca-colya.ru avto-smotr.ru avto-users.ru avtowebs.ru mediklook.ru medikstat.ru medkrila.ru lechim-doma.ru lechimtut.ru zaxist.ru medikdnya.ru medproba.ru zdoroviya.ru desbal.ru

open api access error

Во-первых, хочу сказать огромное спасибо за классный модуль. Для нашего сайта он настоящая находка! Но мы столкнулись с проблемой, которую пока не смогли решить. Пересмотрел комменты на Вашем сайта, на drupal.ru и на D.o, но ответа не нашел, поэтому побеспокою.
Когда нажимаешь на кнопку для логина через VK, ничего не происходит. В Firebug пишет open api access error. Настройки в модуле и в приложении на vkontakte.ru совпадают.Что странно, перед тем, как ставить модуль на живой сайт, я сделал копию сайта на субдомене. То есть, та же тема, те же настройки. Там все работало, а как поставил на живой сайт, как по закону подлости нет. Как лечить? Буду благодарен за любую помощь!

cache

Возможно, проблема в кэше. После переустановки модуля (поставил дев. версию) логиниться удаётся, но не всегда. Если логиниться не получается, то в фаербаге пишет open api access error. Такую же ошибку выдает Inspect element Хрома.

Разобрался

Как оказалось, проблема была совсем простой, на решение которой потратил несколько часов. А все потому, что читать надо инструкцию :).

Все дело в том, что в настройках программы вконтакте я указал сайт с www и со слеш, а в друпале без. Внимательнее надо быть, но Новый год... простительно :). Надеюсь, мой коммент сэкономит кому-нить время и нервы.

Роман, уважуха за модуль!

Страницы