Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
Ромка — Пнд, 05/17/2010 - 00:26
Разработчики ВКонтакте.ру не так давно открыли доступ к OpenAPI — интерфейсу, позволяющему обычным пользователям авторизоваться на сторонних сайтах с использованием своих учетных записей ВКонтакте.ру.
Я выкладываю первую версию модуля vk_openapi, который интегрирует Drupal 6 с Open API. Демонстрацию работы модуля вы можете увидеть на этом сайте. Кнопка для авторизации с помощью учетной записи вКонтакте находится в форме авторизации (в правой колонке внизу) и на странице с формой входа.
Особенности модуля
- из учетной записи ВКонтакте выбираются все доступные поля и сохраняются в объекте $user;
- каждому созданному модулем пользователю автоматически может быть назначена роль;
- в качестве аватара нового пользователя может быть использован автар из профиля пользователя ВКонтакте;
- созданный модулем пользователь может быть связан с существующим на сайте аккаунтом.
В ближайших планах: обновление статуса пользователя на основе данных из профиля ВКонтакте.
Скачать модуль можно на drupal.org. В продолжении более подробное описание модуля и инструкция по его установке.
Работа модуля
Это пока первая и очень простая реализация модуля, работает он так:
- после нажатия пользователем кнопки "войти вКонтакте" модуль получает необходимые данные от сервера вКонтакте.
- Далее модуль проверяет есть ли в базе данных Друпала пользователь, связанный с именем, полученным от вКонтакте:
- если его нет, то создается новый пользователь и связывается с 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 вы должны указать параметры созданного ранее приложения ВКонтакте.
Все, после выполнения этих действий к формам авторизации будет добавлена кнопка "войти вКонтакте" и пользователи смогут авторизоваться на вашем сайте с помощью учетных записей вКонтакте. При желании вы можете отключить вывод этой кнопки в формах авторизации, тогда в произвольное место страницы сайта нужно будет вставить код:
- <div id="vk_login" class="vk_login" style="margin: 0 auto 20px auto;" onclick="doLogin();"></div>
который будет заменен на кнопку.
Я старался сделать этот модуль максимально простым для посетителей сайта — авторизоваться в системе можно всего одним кликом. Мне, например, сильно не нравится реализация Facebook Connect для Друпла тем, что после нажатия кнопки "Connect" пользователя заставляют еще заполнить некоторые поля в форме регистрации. По этому данные от ВКонтакте получаются только один раз, при первом входе в систему, и используются только имя и фамилия пользователя. Теоретически, эти данные можно периодически обновлять, также есть возможность получить данные о фотографиях пользователя и его аватарке, его друзьях изменениях статусов, связать логаут на Друпал-сайте с логаутом из ВКонтакте и т.п. Интересно знать нужен ли кому-нибудь подобный функционал или достаточно того, что уже есть сейчас?
Здраствуйте! Спасибо за
oZEROth2008 (не проверено) → Ср, 08/11/2010 - 13:51Здраствуйте! Спасибо за скрипт! Но у меня есть вопрос! Можно ли как нибудь скрипт заставить работать на nginx ?? я всё на друпал настроил и когда нажимаю войти вконтакте то 404 ошибка! может подскажите что где изменить??
Open API security breach
Evgeny Drokov (не проверено) → Сб, 08/14/2010 - 14:52Пока что во всплывающем окне выводится сообщение об ошибке: Open API security breach. Есть идеи с чем это может быть связано?
Настройки модуля:
Адрес сайта: http://freeflight.ru
Базовый домен: freeflight.ru
Либо неверно заданы настройки
Ромка → Сб, 08/14/2010 - 15:05Либо неверно заданы настройки приложения в самом ВКонтакте, либо неверно заданы настройки модуля.
Больше информации
Evgeny Drokov (не проверено) → Сб, 08/14/2010 - 15:55Посмотрите, пожалуйста, http://freeflight.ru/vk1.png и http://freeflight.ru/vk2.png. Что здесь может быть не так?
Хмм... у меня страница
Ромка → Сб, 08/14/2010 - 16:01Хмм... у меня страница настройки приложения во ВКонтакте выглядит не так как на вашем скриншоте. Вы уверены, что создали приложение типа "сайт"? Вот тут: http://vkontakte.ru/developers.php справа вверху надо нажать "Подключить сайт".
Да, подключал веб-сайт
Evgeny Drokov (не проверено) → Сб, 08/14/2010 - 17:56уже 2 раза
Роман , а не могли бы вы привести пример правильных настроек ?
Алексей Рубель → Сб, 02/12/2011 - 05:17Очень хочется задействовать Ваш модуль на сайте , а не получается по причине , указанной выше. Могли бы вы привести пример правильнх настроек - вконтакте и соотвествующие - на сайте друпал ? Заранее признателен.
Open API security breach
Алексей Рубель → Сб, 02/12/2011 - 19:42подобная ошибка возникла , когда изменил код приложения и секьрити кей на новые , предварительно сделав новое приложение вконтакте.
Вылечил только удалением всех данных о модуле из базы, и повторной переустановкой заново. Вероятно, смена ключей в интерфейсе не изменяет базу, хотя это только мое предположение.
Однако auth error[2] не дает нормально жить по прежнему. ПАМАГИТЕ! :)
ответе пожалуйста на мой
Дмитрий «Xolms»... → Сб, 08/14/2010 - 17:56ответе пожалуйста на мой вопрос.
Ждать ли устранения ошибки или отказываться от модуля?
вход через модуль при интеграции друпала с phpBB
Антон Ашеров → Втр, 08/17/2010 - 10:13При входе на друпал не создается запись для форума phpBB. Пишет bad nickname. В друпале user нормально функционирует.
В ближайшее время эта ошибка
Ромка → Чт, 09/23/2010 - 09:19В ближайшее время эта ошибка будет исправлена. В моей дев-версии этого бага уже нет, через 3-4 дня рассчитываю выложить обновленную версию в общий доступ.
Quote:ответе пожалуйста на
Ромка → Втр, 08/17/2010 - 10:20Ждать ли устранения ошибки или отказываться от модуля?
Это сторонние модули, с ними я интеграцию не предусматривал. Не уверен что в ближайшее время у меня найдется время чтобы сделать такую интеграцию.
спс
Антон Ашеров → Втр, 08/17/2010 - 17:00спс
ошибка
Пётр «и его тём... → Чт, 08/19/2010 - 05:31всё сделал по инструкции. после нажатия на кнопку выдаёт: ошибка авторизации.
пробовалось с нескольких компьютеров. установлено всё по инструкции. помогите, пожалуйста
Предложение по доработке
Lex Misiura → Пнд, 08/23/2010 - 06:42Предложение по доработке модуля
Было бы хорошо как то настраивать отражение кнопки.
точнее настроить в каком месте блока авторизации и как она появится.
Кстати у меня тоже проблема с /vk/xd_receiver.html
Но у меня прикручен IIRF и я быстро дописал в ini строчку
RewriteRule ^/vk/(.*)$ /index.php?q=vk/$1 и решил эту проблему
ответьте на мой вопрос
oZEROth2008 (не проверено) → Пт, 08/27/2010 - 15:48ответьте на мой вопрос пожалуста! ! Можно ли как нибудь скрипт заставить работать на nginx ?? я всё на друпал и вконтакте настроил и когда нажимаю войти вконтакте на сайте то 404 ошибка! может подскажите что где изменить??
при входе на сайте
Yor Ik → Чт, 09/02/2010 - 18:56при входе на сайте получил:
<?php * 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.
* 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.
* 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.?>
Роман auth error[1] как
Toxed Wobble → Пнд, 09/13/2010 - 22:34Роман
auth error[1]
как лечить? вроде все правильно сделал )
Эта ошибка возникает если вы
Ромка → Чт, 09/23/2010 - 09:06Эта ошибка возникает если вы не авторизовались во ВКонтакте. Точнее, если модуль не может найти у вас куку, оставленную вконтактом. Куки в браузере включены?
Error connecting to server.
Александр Наливалкин → Ср, 09/22/2010 - 12:08здравствуйте установил ваш модуль но вот ошибка в сплывающем окне:
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×tamp=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×tamp=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 пишет после входа на сайт под своим логином.
У вас случайно не установлен
Ромка → Чт, 09/23/2010 - 09:15У вас случайно не установлен модуль 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". Если оба способа не сработают, то надо попросить хостера включить эту опцию. Или сменить хостинг.
Какие еще сторонние модули могут конфликтовать?
Александр Наливалкин → Чт, 09/23/2010 - 11:04Нет login_destination у меня не установлен, какие еще сторонние модули могут конфликтовать?
Со второй ошибкой справился Спасибо.
Не знаю. Напишите список
Ромка → Чт, 09/23/2010 - 11:11Не знаю. Напишите список нестандартных установленных модулей, в свободное время посмотрю, кто из них может мешать работе моего модуля.
список включенных модулей на сайте
Александр Наливалкин → Чт, 09/23/2010 - 11:28вот список включенных модулей на сайте
CCK
FileField
ImageField
ctools
privatemsg
panels
keywords
captcha
cumulus
hidden_captcha
hidden_image_captcha
imce
bueditor
SAPE
site_map
Попробуйте временно выключить
Ромка → Чт, 09/23/2010 - 11:43Попробуйте временно выключить модули: cumulus, hidden_captcha, hidden_image_captcha и посмотреть не пропадет ли ошибка.
Отключение этих модулей
Александр Наливалкин → Чт, 09/23/2010 - 14:48Отключение этих модулей не исправляет ошибку.
Тогда у меня идей нет. Нужно
Ромка → Чт, 09/23/2010 - 15:43Тогда у меня идей нет. Нужно больше информации. Эта ошибка возникает в 2 случаях:
1. вы не смогли авторизоваться ВКонтакте (вконтактовское окошко с запросом авторизации выскакивает?). Это значит, что вам надо разбираться с настройками приложения ВКонтакте
2. какой-то модуль не дает завершить работу моему модулю, я знаю о таком поведении модуля login_destination, но возможно какой-то еще модуль может мешать работе.
модуль аля login_destination
Андрей Пронин → Вс, 09/26/2010 - 19:27А не подскажите примерно как исправить?
какое условие поставить. У меня стоит примерно такой же модуль - который использует редирект (нужно для установки куков на другом домене.)
Пришлось решать проблему так:
<?php
function vk_openapi_login() {
session_start();
$_SESSION['vk']='1';
$member = authOpenAPIMember();
?>
В другом скрипте проверять
<?php
if ($_SESSION['vk'] != 1)
?>
и не делать редирект
Если есть более изяшное и правильное решение Подскажите.
Error connecting to server vk_openapi
Ged (не проверено) → Пнд, 08/15/2011 - 16:42Нужно включить в апаче модуль 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
Надеюсь кому-нибудь время сэкономит. Сам потратил на поиски несколько часов.
доработка модуля
Андрей Пронин → Пнд, 09/27/2010 - 22:17Не плохо бы встроить возможность указывать пользователям свой ай ди контакта и потом авторизовываться через него.
номер лучше сделать не редактируемым - и автоматически вставлять - после нажатия на кнопку типо "Получить номер в контакте"
Рома, огромное спасибо за
Профессор Насекомус → Пт, 10/01/2010 - 00:37Рома, огромное спасибо за этот модуль! Работает, как часы.
Если facebook connect такой нехороший, может есть желание сделать такой-же для фэйсбука? Думаю, что с таким опытом, написание не составит труда. А нам будет очень приятно :)
Привет. выдало ошибку алертом
Александр Реонов → Ср, 10/06/2010 - 15:10Привет. выдало ошибку алертом auth error[1]. Новая запись не создалась но куки vk_app_n установился. хотя незнаю правильный или нет
Разобрался. при вводе айди
Александр Реонов → Ср, 10/06/2010 - 21:01Разобрался. при вводе айди приложения в начале был пробел. Но теперь другая ошибка. После создания пользователя предлагает ввести новый емайл но когда нажимаю сабмит выдает ошибку
warning: mail(): Bad parameters to mail() function, mail not sent. in /var/hsphere/local/home/id0790/сайт/includes/mail.inc on line 193.
Email Registration
Александр Реонов → Сб, 10/09/2010 - 14:14Добрый день. Есть замечательный модуль в друпале "Email Registration". Он ползволяет производить регистрацию и авторизацию только по мылу. Тоесть есть некоторое сходство с контактом где пользователю для аунтефикации предлагают ввести маил. Так вот суть вопроса.... после того как пользователь вошел на сайт через контакт ему создается уч. запись и потом на его странице предлагается связать уже существующею запись на сайте с его только что созданой(или просто привязать запись контакта к записи на сайте) или что-то в том роде. Для этого предлагается ввести ЮЗЕР нейм и пароль. Было бы неплохо сделать так что если установлен Email Registration тогда предлается при связи акаунта ввод не юзернайм а майл.
Спасибо! все настроил за
Андрей Польшин → Чт, 10/14/2010 - 19:44Спасибо! все настроил за полчаса... единственно чет перевод не пошел у меня.... выдал такой эррор
"Файл перевода ru.po содержит ошибку: невозможно обработать формулу множественных чисел."
Анонимность
Александр (не проверено) → Ср, 10/20/2010 - 07:59Роман, извините за оффтоп, но вопросик назрел.
Читал вашу статью о том, как создать сеть типа хабры и другие полезные статьи, за них спасибо.
Однако вот вопрос... А есть ли возможность на друпале сделать так, чтобы было всего 2 коллективных блога, причем в один из которых могли бы писать анонимы?
Можно. Самый просто способ:
Ромка → Ср, 10/20/2010 - 09:45Можно. Самый простой способ: создать два типа контента к одному дать доступ на создание только авторизованным юзерам, другому — всем. Фильтровать с помощью Views.
Спасибо
Валера Соловьев_1 → Вс, 10/24/2010 - 02:13Спасибо за модуль - очень удобно ;)
У Себя заюзал vk.login: blog.kh.ua
Подскажите пожалуйста, как
Станислав «Sky»... → Пнд, 10/25/2010 - 14:39Подскажите, пожалуйста, как заставить модуль выводить код внизу страницы только для определенной темы?
Например, у меня есть тема для "больших" браузеров и для мобильников. В мобильной версии выводит вот этот код:
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);
}());
Как бы его убрать для мобильной темы, но оставить для основной?
Здравствуйте, спасибо за ваш
Василий Уткин → Сб, 10/30/2010 - 20:37Здравствуйте, спасибо за ваш труд -)
Вроде сделал все правильно, но после ввода данных выдает
auth error [1]
Если после этого зайти вконтакт, то там авторизация есть, куки так же нашел, пробовал в 2 браузерах.
Что может быть?
напиши как настроить плагин
Anonymous (не проверено) → Сб, 11/20/2010 - 13:57нужна инструкция для чайников,
Application ID: тут вроде понятно
Secret key: ?
Redirect URL: ?
рег пользователя
Андрей Пронин → Сб, 11/20/2010 - 21:21есть ли какая защита от регистрации пользователя?
то есть можно ли запретить рег пользователем под тем же ником в течении суток.
иногда создается 2-3 одинаковых учетных записи типо ФИО_1 ФИО_2 ФИО_3
комментарий
IraklijFjodorov (не проверено) → Сб, 12/04/2010 - 15:49Только тут аренда микроавтобуса по Киеву и Украине
da100let.dn.ua
Jorje (не проверено) → Втр, 12/21/2010 - 14:48da100let.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
endrus (не проверено) → Пнд, 01/03/2011 - 12:27Во-первых, хочу сказать огромное спасибо за классный модуль. Для нашего сайта он настоящая находка! Но мы столкнулись с проблемой, которую пока не смогли решить. Пересмотрел комменты на Вашем сайта, на drupal.ru и на D.o, но ответа не нашел, поэтому побеспокою.
Когда нажимаешь на кнопку для логина через VK, ничего не происходит. В Firebug пишет open api access error. Настройки в модуле и в приложении на vkontakte.ru совпадают.Что странно, перед тем, как ставить модуль на живой сайт, я сделал копию сайта на субдомене. То есть, та же тема, те же настройки. Там все работало, а как поставил на живой сайт, как по закону подлости нет. Как лечить? Буду благодарен за любую помощь!
cache
endrus (не проверено) → Пнд, 01/03/2011 - 18:03Возможно, проблема в кэше. После переустановки модуля (поставил дев. версию) логиниться удаётся, но не всегда. Если логиниться не получается, то в фаербаге пишет open api access error. Такую же ошибку выдает Inspect element Хрома.
Разобрался
endrus (не проверено) → Втр, 01/04/2011 - 00:08Как оказалось, проблема была совсем простой, на решение которой потратил несколько часов. А все потому, что читать надо инструкцию :).
Все дело в том, что в настройках программы вконтакте я указал сайт с www и со слеш, а в друпале без. Внимательнее надо быть, но Новый год... простительно :). Надеюсь, мой коммент сэкономит кому-нить время и нервы.
Роман, уважуха за модуль!
Респект за модуль, очень
Gairon (не проверено) → Чт, 01/06/2011 - 23:29Респект за модуль, очень понравился.
7 Друп
Андрей Пронин → Пнд, 01/10/2011 - 00:49будет ли версия под 7-ку?
VK_OpenAPI и Drupal 7
Толик (не проверено) → Чт, 01/13/2011 - 02:02Ромка, скажите, планируется ли выпуск версии под Drupal 7, и если "да" - то когда? :)