Авторизация на 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" пользователя заставляют еще заполнить некоторые поля в форме регистрации. По этому данные от ВКонтакте получаются только один раз, при первом входе в систему, и используются только имя и фамилия пользователя. Теоретически, эти данные можно периодически обновлять, также есть возможность получить данные о фотографиях пользователя и его аватарке, его друзьях изменениях статусов, связать логаут на Друпал-сайте с логаутом из ВКонтакте и т.п. Интересно знать нужен ли кому-нибудь подобный функционал или достаточно того, что уже есть сейчас?
Очень, очень! хочется версию
Евгений Козлов → Пт, 01/14/2011 - 17:19Очень, очень! хочется версию под 7 Drupal
Есть проект
Денис (не проверено) → Чт, 01/27/2011 - 00:23Роман,
Я знаю вас как самого продвинутого друпал разработчика в России. Данный модуль - очередное подтверждение.
Хотел бы предложить вам работу - или на постоянной основе или на проектной.
Напишите мне, если будет интересно, я расскажу вам о компании и о том, что мы хотим сделать.
Re: Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
Артемов Константин → Пт, 02/04/2011 - 06:34Здорово, тоже хотелось бы писать на эту тему, жаль литературного дара нет. Да и не только
Re: Занятно. Подпишусь-ка
Бобров Вячеслав (не проверено) → Пнд, 02/07/2011 - 12:01Занятно. Подпишусь-ка я на RSS пожалуй
Re: Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
Бобров Вячеслав (не проверено) → Пт, 02/11/2011 - 16:49Народ, где вы такие темы для сайтов берете?
ошибка при авторизацции по кнопке через контактную форму
Алексей Рубель → Сб, 02/12/2011 - 03:16http://clip2net.com/s/LLMz -
выскакивает такое окно при авторизации -. в чем может быть причина ?
и еще вопрос :
http://clip2net.com/s/LLS7
о каком урле здесь идет речь ? урл после входа на сайт ? Или это должен быть урл профиля в контакте ? Неплохо было бы в комментариях к полю дать несколько слов пояснений. Заранее спасибо !
вот такая
Anonymous (не проверено) → Ср, 02/16/2011 - 14:18вот такая проблема
http://s015.radikal.ru/i331/1102/8f/c3d9e6bba095.jpg
как решать?
Drupal 7
Garik (не проверено) → Пнд, 03/21/2011 - 01:13Хотелось бы увидеть обновление этого модуля для 7й версии Друпала
D7
Алексей Костин → Пт, 06/17/2011 - 03:12Да, Роман, есть ли какие-то планы по портированию на D7? Или может посоветуете какое-то более комплексное решение (кроме Loginza), где ВКонтакт будет доступен для логина наряду с другими соцсетями?
Re: А вы случайно не из Москвы?
Меховщиков Руслана → Втр, 05/24/2011 - 20:17А вы случайно не из Москвы?
Re: Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
Меховщиков Руслана → Ср, 06/01/2011 - 21:52Прикольная тачка на прокачку:))риаритетные блин!:))недавно в Москве такие катались:))точнее выставка их была..было любопытно:)))
проверка на уже существующий e-mail
sergeysynergy (не проверено) → Чт, 06/30/2011 - 19:32Большое спасибо за отличный нужный модуль.
Если включить опцию обязательного e-mail (Oblige users to enter e-mail.) то пользователь при регистрации может указать любой, даже уже существующий у пользователя друпала e-mail. Таким образом оба пользователя не смогут сохранить свой аккаунт - e-mail получается дублируется.
Также небольшой вопрос: а что даёт подтверждение адреса e-mail, которое приходит при регистрации?
Сорри, туплю, видимо тоже
sergeysynergy (не проверено) → Чт, 06/30/2011 - 21:04Сорри, туплю, видимо тоже самое, что и при обыкновенной регистрации )
Роман, в какую сторону
semein (не проверено) → Чт, 09/08/2011 - 10:52Роман, в какую сторону копать: код преобразовывается в кнопку только на страничке /admin. во всех остальных местах (и в блоке, и в форме авторизации на главной сайта), он не преобразуется (внутри дива ничего не появляется).
на /admin стандартный garland
semein (не проверено) → Чт, 09/08/2011 - 10:53на /admin стандартный garland
hostinh nic.ru and vk api
vitsss (не проверено) → Пнд, 01/30/2012 - 22:52бился пару часов, статья очень помогла но ни где ни слова не было сказано про "json".
Включил и все работает.