Ромка!eu

  • Отдых
  • Работа
Главная — Блоги — Ромка's blog

Это старая (Drupal 6) версия сайта romka.eu. Она больше не обновляется, комментирование материалов отключено. Обновленная версия сайта доступна по адресу http://romka.eu.

Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте

Ромка — Пнд, 05/17/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" пользователя заставляют еще заполнить некоторые поля в форме регистрации. По этому данные от ВКонтакте получаются только один раз, при первом входе в систему, и используются только имя и фамилия пользователя. Теоретически, эти данные можно периодически обновлять, также есть возможность получить данные о фотографиях пользователя и его аватарке, его друзьях изменениях статусов, связать логаут на Друпал-сайте с логаутом из ВКонтакте и т.п. Интересно знать нужен ли кому-нибудь подобный функционал или достаточно того, что уже есть сейчас?

  • Drupal
  • OpenAPI
  • вКонтакте
  • Ромка's blog

Кнопка в Opera 10.53 —

xandeadx (не проверено) → Пнд, 05/17/2010 - 01:56

Кнопка в Opera 10.53 — http://img97.imageshack.us/img97/6723/20100517014838.png

Хмм... удивительно, у меня в

Ромка → Пнд, 05/17/2010 - 07:52

Хмм... удивительно, у меня в Опере такого глюка нет...

Роман, проверте кодировку. У

RagnarR (не проверено) → Пнд, 05/17/2010 - 09:25

Роман, проверте кодировку. У кнопки кодировка - cp1251, а у страницы - utf8.

Аналогично :(

Сергей Demin → Пнд, 05/17/2010 - 09:33

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

надо!

Евгений Корнеев → Пнд, 05/17/2010 - 09:55

Да, модуль надо расширять. За реализацию - огромное спасибо :) думал уже платить фрилэнсерам за написание.
Загрузка аватара была бы кстати, ну и по юзабилити кое-какие мелочи...

«В Контакте» а не вКонтакте

Anonymous (не проверено) → Пнд, 05/17/2010 - 09:56

«В Контакте» а не вКонтакте

Кнопка в Opera 10.53 —

Ромка → Пнд, 05/17/2010 - 10:23

Кнопка в Opera 10.53 — http://img97.imageshack.us/img97/6723/20100517014838.png

Подтверждаю. Аналогичный глюк выскочил в Опере и у меня.

Роман, проверте кодировку. У кнопки кодировка - cp1251, а у страницы - utf8.

Тут проблема в том, что кнопку отдает сам вконтакт вот этим скриптом: http://vkontakte.ru/js/api/openapi.js. Сейчас попробую разобраться как конвертнуть в utf8 полученный код кнопки.

Кажется исправил, должна

Ромка → Пнд, 05/17/2010 - 10:56

Кажется исправил, должна сейчас корректно кнопка отображаться.

Да, теперь все отлично!

RagnarR (не проверено) → Пнд, 05/17/2010 - 12:29

Да, теперь все отлично!

Спасибо, своевременная реализация

Алексей Тарасов → Пнд, 05/17/2010 - 12:36

Роман, спасибо

Спасибо!

Кузьмин Степан → Пнд, 05/17/2010 - 13:58

Работает :)

Было бы замечательно -

Кузьмин Степан → Пнд, 05/17/2010 - 14:02

Было бы замечательно - получать аватар пользователя Вконтакте и присваивать его новому пользователю. Так же хорошо сделать двухсторонний logout.

Ок, учту пожелание.

Ромка → Пнд, 05/17/2010 - 14:18

Ок, учту пожелание.

После нажатия на кнопку

Anonymous (не проверено) → Пнд, 05/17/2010 - 14:41

После нажатия на кнопку авторизация не происходит. Кроме того идет зацикленное соединение с вконтакте.

Какой браузер и ОС? Включен

Ромка → Пнд, 05/17/2010 - 14:47

Какой браузер и ОС? Включен ли java-script (хотя похоже что включен)? Может какие-то еще данные сообщите, по которым проблему можно будет локализовать?

Имя пользователя

Андрей Постников → Пнд, 05/17/2010 - 14:46

Ром, "контакт" недавно добавил ники, вероятно до них можно достучаться через данное АПИ.

А так получается что name = ФИО которые могут меняться ...

<?php$account->name = check_plain($first_name . ' ' . $last_name);?>
Сие очень плохо! check_plain нужно использовать только при выводе информации, а полученные данные сохранять в исходном виде.

С нетерпением жду анонса на d.org

Сие очень плохо! check_plain

Ромка → Пнд, 05/17/2010 - 15:57

Сие очень плохо! check_plain нужно использовать только при выводе информации, а полученные данные сохранять в исходном виде.

Ыэх, согласен, я эту функцию использовал, чтобы отрезать лишние символы из имен. Попробую поэкспериментировать с никами... В модуле еще один косяк есть... хотя может он и не косяк вовсе. Данные забираются через java-sctipt, хотя я уверен, что их можно получить и из PHP, я сейчас в этом направлении двигаюсь.

"Лишние" символы

Андрей Постников → Пнд, 05/17/2010 - 22:04

Полагаю, что лучше пользоваться
http://api.drupal.org/api/function/drupal_substr/6 или
http://api.drupal.org/api/function/truncate_utf8/6

C JS засада... разве они не передают информацию стандартным POST GET?
- иначе придется конвертить данные из 1251...

Видимо cыроват их api

Тут должна бить тема комментария.

qwertyman → Пнд, 05/17/2010 - 17:56

Здравствуй Ромка
из Евросоюза.

По счастливой случайности нагуглил твой модуль - молодца. Теперь благодаря тебе у нас будет авторизация через всесоюзную социальную сеть. Сам пока толком не знаю, как понимать этот OpenAPI - победа амбиций Павлика Дурова & Co над здравым разумом или наш ответ западу на них OpenID, OAuth и FacebookConnect.

Так вот, о модуле, работает безупречно, но хотелось бы как в twitter обновлять свой статус вконтакте. Заходишь в «My account», кликаешь по закладке «Вконтакте», прописываешь e-mail, пароль и даже при помощи элементарного microblog обновляешь свой статус.

Начал изучать OpenAPI и наткнулся на http://habrahabr.ru/blogs/php/93037/ «как оказалось, сессия при авторизации выдается всего на час, что для задачи явно не подходит. В итоге решено было пойти путем эмуляции и сделать логин и авторизацию через cookies». Значит или делать при помощи OpenAPI с перелогиниванием (филологи меня простят) каждый час или авторизацию через cookies. Какой метод ты считаешь наиболее подходящим для этой задачи.

Полезная ссылка...

Андрей Постников → Пнд, 05/17/2010 - 22:10

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

но сыровато мля...

PS: Ромка, поставь http://drupal.org/project/comment_notify авторизованным то пользователям-то удобнее на мыл получать оповещения о коментах!

Не могли бы Вы подсказать:

Максим Соколов → Втр, 05/18/2010 - 11:43

Не могли бы Вы подсказать: как вывести кнопку "Войти Вконтакте" обособленно без формы авторизации.. ? Хотелось бы её добавить в футер страницы в виде "блока", но без объёмной друпаловской формы.

А у вас не сработал вариант

Ромка → Втр, 05/18/2010 - 12:28

А у вас не сработал вариант со вставкой в нужное место страницы кода:

  1. <div id="vk_login" style="margin: 0 auto 20px auto;" onclick="doLogin();"></div>

?

Я просто невнимательно

Максим Соколов → Втр, 05/18/2010 - 14:37

Я просто невнимательно прочитал инструкцию... спасибо!

Интеграция вперед!!

Виктор Богуцкий → Втр, 05/18/2010 - 14:17

Интеграция вперед!!

После авторизации через API

Максим Соколов → Втр, 05/18/2010 - 15:45

После авторизации через API упорно посылает на страницу "профиля", где требует ввести e-mail. Приэтом в настройках стоит переадресовывать совсем на другую страницу.

Ну да, это так и задумано. На

Ромка → Втр, 05/18/2010 - 16:47

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

Выложить на d.o

Андрей Постников → Втр, 05/18/2010 - 17:34

когда планируешь выложить? дабы дорабатывать в традиционной для дру манере? Ж)

На д.о уже лежит:

Ромка → Втр, 05/18/2010 - 17:42

На д.о уже лежит: http://drupal.org/project/vk_openapi, сейчас занимаюсь прикручиванием доп фишек.

спасибо, попробуем

Василий Карпюк → Втр, 05/18/2010 - 19:25

спасибо, попробуем (=
присоединяюсь к просьбе об аватарке и есть ещё предложение о добавлении веб-сайта пользователю его страницы вконтакте

страница вКонтакте

Андрей Постников → Втр, 05/18/2010 - 20:59

Аватар и прочие данные важнее не разово вытаскивать, а иметь возможность синхронизировать, при каких-нить условиях

А вот насчет ссылки на страницу профиля ... что-то вроде было, типа списка своих профайлов в других социалках

Quote:Аватар и прочие данные

Ромка → Втр, 05/18/2010 - 22:08

Quote:
Аватар и прочие данные важнее не разово вытаскивать, а иметь возможность синхронизировать, при каких-нить условиях

Я думаю таким условием сделать авторизацию. То есть при каждой авторизации будут обновляться все данные кроме статуса. Обновление статуса будет отслеживаться постоянно.

Статус

Андрей Постников → Втр, 05/18/2010 - 22:11

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

Там фигня в том, что

Ромка → Втр, 05/18/2010 - 22:29

Там фигня в том, что обращение к вконтактовскому АПИ идет через java-скрипт, пока, из PHP дергать его я не научился. Так что в любом случае инициировать процесс получения статуса может только залогиненый через вконтакт юзер.

Думаю сделать так: на hook_user повесить проверку, когда в последний раз синхронизировались данные с вконтактом если это делалось более определенного времени назад, то в тело страницы, будет добавляться java-скрипт, забирающий обновления и яаксом пишущий их в БД.

Ну и головняк они изобрели...

Андрей Постников → Втр, 05/18/2010 - 22:38

Ром, что-то нифика я не могу найти ссылок на то, что именно через js все таскается.
Ткни плиз носом...

На хабре видел реализацию через curl - как раз статья про синхронизацию статусов

Может таки нативно http://api.drupal.org/api/function/drupal_http_request/6 что-то можно?

http://vkontakte.ru/pages.php

Ромка → Втр, 05/18/2010 - 22:46

http://vkontakte.ru/pages.php?o=-1&p=Open%20API. А ты меня можешь ткнуть носом в пример с curl?

проверка

Concept Audio → Чт, 05/20/2010 - 18:27

хочу написать что-нибудь, чтобы проверить модуль и сказать автору спасибо.

Пожалуйста, жду от вас

Ромка → Чт, 05/20/2010 - 18:43

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

Хмм

Concept Audio → Чт, 05/20/2010 - 19:10

Кстати, у меня не получилось заставить его работать пока.
Не появляется кнопка.

Должно ли пройти время с момента регистрации приложения 'В Контакте' ?
Т.е. пройти проверку оно должно?

Указал ключ, секретный код, site url (http://www.example.com), base url (example.com).

Еще бажик: когда впервый раз зашел в настройку модуля, Site Url был указан как "http://http://www.example..." т.е. с лишними 'http://'

Вообще модуль в эти поля

Ромка → Чт, 05/20/2010 - 19:35

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

Про скорость реакции вконтакта сказать могу только на своем примере: у меня приложение заработало сразу. Косяки возможны из-за того что неправильно в админке заданы параметры приложения.

Роли

Concept Audio → Чт, 05/20/2010 - 19:16

Еще момент:
если на сайте несколько ролей, модуль присваивает к этой авторизации "минимальную, базовую" роль?
или как? у меня на сайте анонимы, к примеру, не имеют права оставлять комментарии.

Присваивается стандартная

Ромка → Чт, 05/20/2010 - 19:18

Присваивается стандартная друпальская роль "авторизованный пользователь".

что-то непонятное

Concept Audio → Сб, 05/22/2010 - 23:41

Попробовал установить модуль заново и вспомнил, что при первом заупске (активации модуля) у меня возник белый экран с адресом "http://www.сайт.ru/admin/build/modules/list/confirm"

после обновления страницы, модуль как-бы активируется, но работать, походу, отказывается.

и так каждый раз (если удалить модуль и попробовать заново), белый экран при первой активации модуля.

огромное спасибо за модуль,

Пашка Родионов → Пт, 05/21/2010 - 17:00

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

Добавил этот функционал в

Ромка → Сб, 05/22/2010 - 23:39

Добавил этот функционал в четвертой альфе модуля.

респектую 2-мя руками=)

Пашка Родионов → Ср, 05/26/2010 - 00:28

респектую 2-мя руками=)

Модуль не работает на связке

Lark (не проверено) → Вс, 05/23/2010 - 17:21

Модуль не работает на связке nginx + php-fpm. :(

Какие ошибки выдаются?

Ромка → Вс, 05/23/2010 - 23:42

Какие ошибки выдаются?

Проблема была со страницей

Lark (не проверено) → Пнд, 05/24/2010 - 02:16

Проблема была со страницей /vk/xd_receiver.html
Поправил правила для nginx - все заработало!

А какая проблема была? И

Ромка → Пнд, 05/24/2010 - 09:52

А какая проблема была? И какое у нее решение? Может быть я смогу ее в самом модуле предотвратить? Или опишу в документации к модулю, чтобы другие пользователи знали как ее исправить.

Проблема была в том, что у

Anonymous (не проверено) → Пнд, 05/24/2010 - 12:55

Проблема была в том, что у меня в настройках .html файлы обрабатывались особым образом, пришлось сделать специальное правило для /vk/xd_receiver.html :

<?php
location 
/vk/xd_receiver.html {
    
try_files $uri @drupal;
}

location @drupal {
    
index index.php;
    if (!-
e $request_filename) {
      
rewrite ^/(.*)$ /index.php?q=$1 last;
    }
}
?>

(Использовал для настройки nginx - http://github.com/yhager/nginx_drupal

  • 1
  • 2
  • 3
  • 4
  • следующая ›
  • последняя »

Обо мне

Всем привет!
Меня зовут
Роман Архаров, я профессиональный веб-разработчик, программирую на языках PHP, Python и Action-Script, в работе использую фреймворки Drupal и Django. В этом блоге я размещаю заметки и статьи, связанные с моей работой, отдыхом и другими интересными мне темами.

Похожие заметки

  • Пример разработки плагина для модуля CCK
  • Несколько статей о Друпале
  • Swftools и модуль Pdf2SWfField для Друпала
  • Темизация Drupal. Часть 2. Анатомия темы оформления Drupal
  • Темизация Drupal. Часть 1

Популярные заметки

  • Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
  • Перетаскивание строк таблицы. Table drag and drop — плагин для jQuery
  • Темизация Drupal. Часть 3. Основы Drupal Forms API и темизация форм
  • Темизация Drupal. Часть 4. Темизация Views
  • AJAX. Обмен данными между клиентом и сервером, закачка на сервер файлов без перезагрузки страницы при помощи библиотеки jQuery.
  • Кеширование на Drupal-сайте. Сравнение встроенного в Drupal кеша, статического файлового кеша (модуль Boost) и Varnish
  • Тестирование модуля "Inner poll"
  • Несколько панорам из путешествия по Перу и Боливии
  • Arduino + bluetooth, небольшая проблема
  • Пример разработки плагина для модуля CCK

Подписка


Последние комментарии

  • drupal-admin → Кеширование на Drupal-сайте. Сравнение эффективности встроенного в Drupal кеша, статического файлового кеша (модуль Boost) и Var → Отличная статья
  • Меховщиков Руслана → Проверка имени пользователя на наличие букв из разных алфавитов → Re: Читал про это уже на
  • Вероника → Куба. Лето 2008. Часть 3 → По поводу "приветливых жителей" Тринидада
  • Sfero → Статья в PC Magazine/RE. Drupal: разработка модуля → Немного о контенте
  • RemaGe → Статья в PC Magazine/RE. Drupal: разработка модуля → -)
  • Ромка → Статья в PC Magazine/RE. Drupal: разработка модуля → Да, будет сборка, та которую
  • RemaGe → Статья в PC Magazine/RE. Drupal: разработка модуля → -)
  • anatinge → Поездка в Киев → спасибо :)
  • Ромка → Поездка в Киев → Да, в общем-то, ничего
  • GogA → Поездка в Киев → Заинтриговал, что там за

Новые заметки

  • Кеширование на Drupal-сайте. Сравнение встроенного в Drupal кеша, статического файлового кеша (модуль Boost) и Varnish
  • Любопытное поведение модуля syslog в шестом Друпале (баг?)
  • Arduino + bluetooth, небольшая проблема
  • Гугл 1 марта прекратил поддержку сервиса Google Friend Connect
  • Проба пера в HTML5 + canvas. Эффект ластика
  • Шесть рукопожатий
  • Доклад на DrupalConfMoscow 2011
  • Статусы разных сущностей в Друпале 6
  • Футер, прибитый к низу страницы
  • Путешествие по Перу и Боливии. Часть 2

Тэги

Drupal jquery Куба Лето 2007 Лето 2008 Отдых Работа Штуки-дрюки лето модуль статья цитата
еще тэги

Навигация

  • Exchange rate
  • Переход по внешней ссылке
  • Последние сообщения
  • Фотогалереи

Курсы валют

  • 100 Казахстанских тенге — 21,3687 (-0.43)
  • 10 Украинских гривен — 27,2852 (-13.04)
  • 1 Китайский юань — 10,2706 (-40.98)
  • 100 Японских иен — 53,5332 (+12.67)
  • 1 Доллар США — 65,6210 (+33)
  • 1 Евро — 69,8076 (+29.42)
  • 10000 Белорусских рублей — 36,3310 (-2.51)
  • 1 Турецкая лира — 22,9540 (+4.99)

10 случайных заметок

  • Путешествие по Перу и Боливии. Часть 2
  • Куба, остров Святой Марии.
  • Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
  • Понедельник начинается в субботу
  • Семинар "Управление сайтом с помощью CMS Drupal"
  • Доставка
  • Несколько смешных картинок
  • Невероятный битбокс от Dub FX и Woodnote
  • Разработка сайта на Drupal. Часть 1. Введение.
  • Tagnetic — холодильник тэгов

Случайные фото

Бронзовое море
Фонтаны в Осло работают даже зимой. Карл Юхан Гате
Здание замка Акерхус
Без имени
Насыпь между Кайо Санта Мария и Кубой
Осло, Карл Юхан Гате
Судак, Генуэзская крепость
Пустыня
Еще горы
Я и разноцветные рыбы
Вид на Осло-фьерд со стены замка
Я и кокос... Где то я это уже видел...
Крым
Буквы
Вид на Осло из замка Акерхус
Я на
  • Отдых
  • Работа

При использовании материалов с сайта, пожалуйста, ставьте ссылку на источник. E-mail для связи: mne@romka.eu.