Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
Submitted by Ромка on Пнд, 17/05/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" пользователя заставляют еще заполнить некоторые поля в форме регистрации. По этому данные от ВКонтакте получаются только один раз, при первом входе в систему, и используются только имя и фамилия пользователя. Теоретически, эти данные можно периодически обновлять, также есть возможность получить данные о фотографиях пользователя и его аватарке, его друзьях изменениях статусов, связать логаут на Друпал-сайте с логаутом из ВКонтакте и т.п. Интересно знать нужен ли кому-нибудь подобный функционал или достаточно того, что уже есть сейчас?
164 Comments
Здраствуйте! Спасибо за
Submitted by oZEROth2008 (не проверено) on
Здраствуйте! Спасибо за скрипт! Но у меня есть вопрос! Можно ли как нибудь скрипт заставить работать на nginx ?? я всё на друпал настроил и когда нажимаю войти вконтакте то 404 ошибка! может подскажите что где изменить??
Open API security breach
Submitted by Evgeny Drokov (не проверено) on
Пока что во всплывающем окне выводится сообщение об ошибке: Open API security breach. Есть идеи с чем это может быть связано?
Настройки модуля:
Адрес сайта: http://freeflight.ru
Базовый домен: freeflight.ru
Либо неверно заданы настройки
Submitted by Ромка on
Либо неверно заданы настройки приложения в самом ВКонтакте, либо неверно заданы настройки модуля.
Больше информации
Submitted by Evgeny Drokov (не проверено) on
Посмотрите, пожалуйста, http://freeflight.ru/vk1.png и http://freeflight.ru/vk2.png. Что здесь может быть не так?
Хмм... у меня страница
Submitted by Ромка on
Хмм... у меня страница настройки приложения во ВКонтакте выглядит не так как на вашем скриншоте. Вы уверены, что создали приложение типа "сайт"? Вот тут: http://vkontakte.ru/developers.php справа вверху надо нажать "Подключить сайт".
Да, подключал веб-сайт
Submitted by Evgeny Drokov (не проверено) on
уже 2 раза
Роман , а не могли бы вы привести пример правильных настроек ?
Submitted by Алексей Рубель on
Очень хочется задействовать Ваш модуль на сайте , а не получается по причине , указанной выше. Могли бы вы привести пример правильнх настроек - вконтакте и соотвествующие - на сайте друпал ? Заранее признателен.
Open API security breach
Submitted by Алексей Рубель on
подобная ошибка возникла , когда изменил код приложения и секьрити кей на новые , предварительно сделав новое приложение вконтакте.
Вылечил только удалением всех данных о модуле из базы, и повторной переустановкой заново. Вероятно, смена ключей в интерфейсе не изменяет базу, хотя это только мое предположение.
Однако auth error[2] не дает нормально жить по прежнему. ПАМАГИТЕ! :)
ответе пожалуйста на мой
Submitted by Дмитрий «Xolms»... on
ответе пожалуйста на мой вопрос.
Ждать ли устранения ошибки или отказываться от модуля?
вход через модуль при интеграции друпала с phpBB
Submitted by Антон Ашеров on
При входе на друпал не создается запись для форума phpBB. Пишет bad nickname. В друпале user нормально функционирует.
В ближайшее время эта ошибка
Submitted by Ромка on
В ближайшее время эта ошибка будет исправлена. В моей дев-версии этого бага уже нет, через 3-4 дня рассчитываю выложить обновленную версию в общий доступ.
Quote:ответе пожалуйста на
Submitted by Ромка on
[quote]ответе пожалуйста на мой вопрос.
Ждать ли устранения ошибки или отказываться от модуля?
[/quote]
[quote]При входе на друпал не создается запись для форума phpBB. Пишет bad nickname. В друпале user нормально функционирует.[/quote]
Это сторонние модули, с ними я интеграцию не предусматривал. Не уверен что в ближайшее время у меня найдется время чтобы сделать такую интеграцию.
спс
Submitted by Антон Ашеров on
спс
ошибка
Submitted by Пётр «и его тём... on
всё сделал по инструкции. после нажатия на кнопку выдаёт: ошибка авторизации.
пробовалось с нескольких компьютеров. установлено всё по инструкции. помогите, пожалуйста
Предложение по доработке
Submitted by Lex Misiura on
Предложение по доработке модуля
Было бы хорошо как то настраивать отражение кнопки.
точнее настроить в каком месте блока авторизации и как она появится.
Кстати у меня тоже проблема с /vk/xd_receiver.html
Но у меня прикручен IIRF и я быстро дописал в ini строчку
RewriteRule ^/vk/(.*)$ /index.php?q=vk/$1 и решил эту проблему
ответьте на мой вопрос
Submitted by oZEROth2008 (не проверено) on
ответьте на мой вопрос пожалуста! ! Можно ли как нибудь скрипт заставить работать на nginx ?? я всё на друпал и вконтакте настроил и когда нажимаю войти вконтакте на сайте то 404 ошибка! может подскажите что где изменить??
при входе на сайте
Submitted by Yor Ik on
при входе на сайте получил:
Роман auth error[1] как
Submitted by Toxed Wobble on
Роман
auth error[1]
как лечить? вроде все правильно сделал )
Эта ошибка возникает если вы
Submitted by Ромка on
Эта ошибка возникает если вы не авторизовались во ВКонтакте. Точнее, если модуль не может найти у вас куку, оставленную вконтактом. Куки в браузере включены?
Error connecting to server.
Submitted by Александр Наливалкин on
здравствуйте установил ваш модуль но вот ошибка в сплывающем окне:
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 пишет после входа на сайт под своим логином.
У вас случайно не установлен
Submitted by Ромка on
У вас случайно не установлен модуль 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". Если оба способа не сработают, то надо попросить хостера включить эту опцию. Или сменить хостинг.
Какие еще сторонние модули могут конфликтовать?
Submitted by Александр Наливалкин on
[quote=Ромка]У вас случайно не установлен модуль login_destination? Если да, то это из-за него "Error connecting to server" и исправить эту ошибку можно или выключив модуль, или попросив автора модуля исправить в нем ошбки в логике, из-за которых редирект срабатывает вне зависимости от способа авторизации.
[/quote]
Нет login_destination у меня не установлен, какие еще сторонние модули могут конфликтовать?
Со второй ошибкой справился Спасибо.
Не знаю. Напишите список
Submitted by Ромка on
Не знаю. Напишите список нестандартных установленных модулей, в свободное время посмотрю, кто из них может мешать работе моего модуля.
список включенных модулей на сайте
Submitted by Александр Наливалкин on
[quote=Ромка]Не знаю. Напишите список нестандартных установленных модулей, в свободное время посмотрю, кто из них может мешать работе моего модуля.[/quote]
вот список включенных модулей на сайте
CCK
FileField
ImageField
ctools
privatemsg
panels
keywords
captcha
cumulus
hidden_captcha
hidden_image_captcha
imce
bueditor
SAPE
site_map
Попробуйте временно выключить
Submitted by Ромка on
Попробуйте временно выключить модули: cumulus, hidden_captcha, hidden_image_captcha и посмотреть не пропадет ли ошибка.
Отключение этих модулей
Submitted by Александр Наливалкин on
Отключение этих модулей не исправляет ошибку.
Тогда у меня идей нет. Нужно
Submitted by Ромка on
Тогда у меня идей нет. Нужно больше информации. Эта ошибка возникает в 2 случаях:
1. вы не смогли авторизоваться ВКонтакте (вконтактовское окошко с запросом авторизации выскакивает?). Это значит, что вам надо разбираться с настройками приложения ВКонтакте
2. какой-то модуль не дает завершить работу моему модулю, я знаю о таком поведении модуля login_destination, но возможно какой-то еще модуль может мешать работе.
модуль аля login_destination
Submitted by Андрей Пронин on
[quote=Ромка]модуль login_destination? Если да, то это из-за него "Error connecting to server" и исправить эту ошибку можно или выключив модуль, или попросив автора модуля исправить в нем ошбки в логике, из-за которых редирект срабатывает вне зависимости от способа авторизации.
[/quote]
А не подскажите примерно как исправить?
какое условие поставить. У меня стоит примерно такой же модуль - который использует редирект (нужно для установки куков на другом домене.)
Пришлось решать проблему так:
В другом скрипте проверять
и не делать редирект
Если есть более изяшное и правильное решение Подскажите.
Error connecting to server vk_openapi
Submitted by Ged (не проверено) on
Нужно включить в апаче модуль 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
Надеюсь кому-нибудь время сэкономит. Сам потратил на поиски несколько часов.
доработка модуля
Submitted by Андрей Пронин on
Не плохо бы встроить возможность указывать пользователям свой ай ди контакта и потом авторизовываться через него.
номер лучше сделать не редактируемым - и автоматически вставлять - после нажатия на кнопку типо "Получить номер в контакте"
Рома, огромное спасибо за
Submitted by Профессор Насекомус on
Рома, огромное спасибо за этот модуль! Работает, как часы.
Если facebook connect такой нехороший, может есть желание сделать такой-же для фэйсбука? Думаю, что с таким опытом, написание не составит труда. А нам будет очень приятно :)
Привет. выдало ошибку алертом
Submitted by Александр Реонов on
Привет. выдало ошибку алертом auth error[1]. Новая запись не создалась но куки vk_app_n установился. хотя незнаю правильный или нет
Разобрался. при вводе айди
Submitted by Александр Реонов on
Разобрался. при вводе айди приложения в начале был пробел. Но теперь другая ошибка. После создания пользователя предлагает ввести новый емайл но когда нажимаю сабмит выдает ошибку
warning: mail(): Bad parameters to mail() function, mail not sent. in /var/hsphere/local/home/id0790/сайт/includes/mail.inc on line 193.
Email Registration
Submitted by Александр Реонов on
Добрый день. Есть замечательный модуль в друпале "Email Registration". Он ползволяет производить регистрацию и авторизацию только по мылу. Тоесть есть некоторое сходство с контактом где пользователю для аунтефикации предлагают ввести маил. Так вот суть вопроса.... после того как пользователь вошел на сайт через контакт ему создается уч. запись и потом на его странице предлагается связать уже существующею запись на сайте с его только что созданой(или просто привязать запись контакта к записи на сайте) или что-то в том роде. Для этого предлагается ввести ЮЗЕР нейм и пароль. Было бы неплохо сделать так что если установлен Email Registration тогда предлается при связи акаунта ввод не юзернайм а майл.
Спасибо! все настроил за
Submitted by Андрей Польшин on
Спасибо! все настроил за полчаса... единственно чет перевод не пошел у меня.... выдал такой эррор
"Файл перевода ru.po содержит ошибку: невозможно обработать формулу множественных чисел."
Анонимность
Submitted by Александр (не проверено) on
Роман, извините за оффтоп, но вопросик назрел.
Читал вашу статью о том, как создать сеть типа хабры и другие полезные статьи, за них спасибо.
Однако вот вопрос... А есть ли возможность на друпале сделать так, чтобы было всего 2 коллективных блога, причем в один из которых могли бы писать анонимы?
Можно. Самый просто способ:
Submitted by Ромка on
Можно. Самый простой способ: создать два типа контента к одному дать доступ на создание только авторизованным юзерам, другому — всем. Фильтровать с помощью Views.
Спасибо
Submitted by Валера Соловьев_1 on
Спасибо за модуль - очень удобно ;)
У Себя заюзал vk.login: blog.kh.ua
Подскажите пожалуйста, как
Submitted by Станислав «Sky»... on
Подскажите, пожалуйста, как заставить модуль выводить код внизу страницы только для определенной темы?
Например, у меня есть тема для "больших" браузеров и для мобильников. В мобильной версии выводит вот этот код:
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);
}());
Как бы его убрать для мобильной темы, но оставить для основной?
Здравствуйте, спасибо за ваш
Submitted by Василий Уткин on
Здравствуйте, спасибо за ваш труд -)
Вроде сделал все правильно, но после ввода данных выдает
auth error [1]
Если после этого зайти вконтакт, то там авторизация есть, куки так же нашел, пробовал в 2 браузерах.
Что может быть?
напиши как настроить плагин
Submitted by Anonymous (не проверено) on
нужна инструкция для чайников,
Application ID: тут вроде понятно
Secret key: ?
Redirect URL: ?
рег пользователя
Submitted by Андрей Пронин on
есть ли какая защита от регистрации пользователя?
то есть можно ли запретить рег пользователем под тем же ником в течении суток.
иногда создается 2-3 одинаковых учетных записи типо ФИО_1 ФИО_2 ФИО_3
комментарий
Submitted by IraklijFjodorov (не проверено) on
Только тут аренда микроавтобуса по Киеву и Украине
da100let.dn.ua
Submitted by Jorje (не проверено) on
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
Submitted by endrus (не проверено) on
Во-первых, хочу сказать огромное спасибо за классный модуль. Для нашего сайта он настоящая находка! Но мы столкнулись с проблемой, которую пока не смогли решить. Пересмотрел комменты на Вашем сайта, на drupal.ru и на D.o, но ответа не нашел, поэтому побеспокою.
Когда нажимаешь на кнопку для логина через VK, ничего не происходит. В Firebug пишет open api access error. Настройки в модуле и в приложении на vkontakte.ru совпадают.Что странно, перед тем, как ставить модуль на живой сайт, я сделал копию сайта на субдомене. То есть, та же тема, те же настройки. Там все работало, а как поставил на живой сайт, как по закону подлости нет. Как лечить? Буду благодарен за любую помощь!
cache
Submitted by endrus (не проверено) on
Возможно, проблема в кэше. После переустановки модуля (поставил дев. версию) логиниться удаётся, но не всегда. Если логиниться не получается, то в фаербаге пишет open api access error. Такую же ошибку выдает Inspect element Хрома.
Разобрался
Submitted by endrus (не проверено) on
Как оказалось, проблема была совсем простой, на решение которой потратил несколько часов. А все потому, что читать надо инструкцию :).
Все дело в том, что в настройках программы вконтакте я указал сайт с www и со слеш, а в друпале без. Внимательнее надо быть, но Новый год... простительно :). Надеюсь, мой коммент сэкономит кому-нить время и нервы.
Роман, уважуха за модуль!
Респект за модуль, очень
Submitted by Gairon (не проверено) on
Респект за модуль, очень понравился.
7 Друп
Submitted by Андрей Пронин on
будет ли версия под 7-ку?
VK_OpenAPI и Drupal 7
Submitted by Толик (не проверено) on
Ромка, скажите, планируется ли выпуск версии под Drupal 7, и если "да" - то когда? :)
Страницы