Модуль для авторизации с использованием учетной записи ВКонтакте
Прислано: Ромка
пн, 17/05/2010 - 07:09
Разработал модуль для авторизации пользователей на Друпал-сайте с использованием ВКонтакте OpenAPI.
Скачать модуль можно на drupal.org. Демо работы модуля доступно тут: http://vktest.kece.ru. Там же находится и инструкция по его установке и настройке.
Возможности модуля:
- Авторизация на сайте с помощью учетной записи ВКонтакте. Из ВКонтакта подтягивается вся доступная информация о пользователе и его аватарка.
- Возможность добавить ко всем материалам кноп ку "Сохранить ВКонтакте"
- Простое добавление виджетов ВКонтакте (комментарии, группы, опросы и т.п.) в любые блоки или материалы на сайте.
Работа модуля
Логика работы модуля:
- после нажатия пользователем кнопки "войти вКонтакте" модуль получает необходимые данные от сервера вКонтакте.
- Далее модуль проверяет есть ли в базе данных Друпала пользователь, связанный с именем, полученным от вКонтакте:
- если его нет, то создается новый пользователь и связывается с 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" пользователя заставляют еще заполнить некоторые поля в форме регистрации. По этому данные от ВКонтакте получаются только один раз, при первом входе в систему, и используются только имя и фамилия пользователя. Теоретически, эти данные можно периодически обновлять, также есть возможность получить данные о фотографиях пользователя и его аватарке, его друзьях изменениях статусов, связать логаут на Друпал-сайте с логаутом из ВКонтакте и т.п. Интересно знать нужен ли кому-нибудь подобный функционал или достаточно того, что уже есть сейчас?
Disclaimer
Итак, с данного момента багрепорты типа "ничего не работает, помогите" игнорируются. Багрепорты связанные с некорректным отображением элементов в нестандартных темах оформления игнорируются, так как они легко локализуются Firebug'ом и исправляются правкой CSS. Рассматриваются только багрепорты с однозначным описанием проблемы: "включил модуль такой-то и перестала работать такая-то функция".
В случае с исчезновением кнопки share, проблема может быть из-за текста поста, по этому попробуйте создать тестовый пост, с 1 простым предложением и сохранить его, если кнопка в таком посте появилась, то продолжайте добавлять в него по 1-2 предложения из поста, в котором кнопка не появляется. В определенный момент она должна будет пропасть и в тестовом посте и тогда вы сможете разместить здесь строку, из-за которой кнопка share исчезает.
- Ромка's blog
- Для комментирования войдите или зарегистрируйтесь
ай, молодца! ушел ставить
- Для комментирования войдите или зарегистрируйтесь
Спасибо!
- Для комментирования войдите или зарегистрируйтесь
В 91 строчке drupal_set_message('User create error', 'error'); можно заменить на drupal_set_message(t('User create error'), 'error'); для переводимости.
Спасибо.
- Для комментирования войдите или зарегистрируйтесь
В 91 строчке drupal_set_message('User create error', 'error'); можно заменить на drupal_set_message(t('User create error', 'error')); для переводимости.
Спасибо.
Ок, спасибо, поправлю.
Вообще, хотелось бы получить фидбек от использования модуля, а также узнать у потенциальных пользователей модуля ответы на следующие вопросы. Нужно ли делать расширенную форму регистрации, как в модуле Facebook connect, в которой пользователя заставляют указать свой e-mail и предлагают не создавать новую учетную запись на Друпал-сайте, а связать фейсбучный аккаунт с существующим в Друпале аккаунте? Нужно ли вытягивать аватарку юзера из ВКонтакта и использовать ее в Друпал-сайте? Нужно ли следить за изменениями статусов юзера во ВКонтакте и как-то выводить их на Друпал-сайте? Нужно ли привязывать логаут из ВКонтакта к логауту из Друпал-сайта? Может какие-то еще есть пожелания?
- Для комментирования войдите или зарегистрируйтесь
Это бомба, респект за труды
- Для комментирования войдите или зарегистрируйтесь
Спасибо за работу !
Что-то у меня в окне входа выводит "Open API security breach"
- Для комментирования войдите или зарегистрируйтесь
Это на моем тестовом сайте или на вашем? Вообще эта ошибка говорит о том, что в настройках неверно указаны "Адрес сайта" и "Базовый домен".
- Для комментирования войдите или зарегистрируйтесь
В настройках модуля
Адрес сайта:
http://www.soft4u.org.ua
Базовый домен:
soft4u.org.ua
Правильно я понял? :)
Модуль Boost выводит в журнал
<?phpThere are php errors on this page, preventing boost from caching. ERROR:
Array
[type] => 128
[message] => Call-time pass-by-reference has been deprecated
[file] => www/sites/all/modules/vk_openapi/vk_openapi.module
[line] => 182?>- Для комментирования войдите или зарегистрируйтесь
очень важная вещь. Спасибо.
- Для комментирования войдите или зарегистрируйтесь
отлично!
- Для комментирования войдите или зарегистрируйтесь
Классный модуль! Спасибо большое!!!
Нужно ли вытягивать аватарку юзера из ВКонтакта и использовать ее в Друпал-сайте?
Мне кажется, вот это - нужно... Все остальное - статусы, логауты - имхо, вещи привязанные к конкретным проектам, кому-то нужно, кто-то может обойтись (в идеале, конечно, вообще данные из ВКонтакте в данные юзера на Друпале переводить :) но опять же - универсальный модуль не получится).
Вопрос: что будет, если пользователь не укажет эмейл, после регистрации? Особенно, если включена активация по эмейлу?
- Для комментирования войдите или зарегистрируйтесь
В настройках модуля
Адрес сайта:
http://www.soft4u.org.ua
Базовый домен:
soft4u.org.ua
Правильно я понял? :)
Модуль Boost выводит в журнал
Да, все правильно. С бустом в паре модуль не тестировал, возможно из-за него глюк, попробую исправить его.
- Для комментирования войдите или зарегистрируйтесь
Вопрос: что будет, если пользователь не укажет эмейл, после регистрации? Особенно, если включена активация по эмейлу?
Этот момент сейчас никак не проверяется. Созданный модулем юзер автоматом активируется. E-mail только предлагается ввести, но это необязательное условие... по идее можно добавить такую опцию, чтобы, если пользователь не указал свой почтовый ящик, при клике по любой ссылке он редиректился на свой профиль с требованием указать e-mail...
- Для комментирования войдите или зарегистрируйтесь
да, это нужно учесть, плиз.
- Для комментирования войдите или зарегистрируйтесь
спасибо за модуль
- Для комментирования войдите или зарегистрируйтесь
да, это нужно учесть, плиз.
А какую вы видите логику работы, если активация аккаунта возможна только администратором? Создавать учетку, не активировать ее и не логинить юзера? Можно так сделать, но тогда, имхо, теряется всякий смысл от интеграции с вконтактом. Тут ведь основная фишка в высокой скорости авторизации: юзер пришел на сайт, увидел интересную статью, решил ее прокомментировать, нажал кнопку "войти ВКонтакте" и все, он имеет возможность писать от своего имени, на эти действия у него уходит от силы секунд 10. Если в эту схему еще вклинится активация созданного аккаунта администратором, то это время сильно увеличится и преимущества регистрации через вконтакт потеряются.
- Для комментирования войдите или зарегистрируйтесь
спасибо за ваш труд
- Для комментирования войдите или зарегистрируйтесь
если активация аккаунта возможна только администратором?
не думаю, что на таком сайте включат модуль вконтакте :)
Хочу предложить такой вариант - на уровне вичерреквеста, конечно :) Выбор в админке вебматером,
либо - дефолт (как сейчас все реализовано),
либо давать какую-то роль, пока юзер не впишет эмейл - как это реализовано в модуле логинтобогган, там есть функция, чтобы юзер логинился без активации, в этом случае ему можно назначить определенную роль,
либо
если пользователь не указал свой почтовый ящик, при клике по любой ссылке он редиректился на свой профиль с требованием указать e-mail...
Еще раз спасибо большое за модуль :)
- Для комментирования войдите или зарегистрируйтесь
в догонку. посмотрел в код модуля.
не знаю насколько это критично НО
у вас
SELECT COUNT(*) AS count FROM {users} WHERE name = '%s'
в модуле user
SELECT COUNT(*) FROM {users} WHERE uid != %d AND LOWER(name) = LOWER('%s')
как видите модуль user не пропустит к регистрации ник demimurych если уже есть зарегистрированный Demimurych.
- Для комментирования войдите или зарегистрируйтесь
Ура вам! Ушел тестить...
- Для комментирования войдите или зарегистрируйтесь
как видите модуль user не пропустит к регистрации ник demimurych если уже есть зарегистрированный Demimurych.
Спасибо, учту в следующей версии.
- Для комментирования войдите или зарегистрируйтесь
По идее e-mail должен быть факультативен по умолчанию, лишь для редких проектов он важен.
С e-mail, в 6ке по крайней мере, головняк отдельный - это поле обязательно, так что всяко придется настраивать.
Задача как и с openID - быстрая авторизация. Остальные навороты можно прикручивать по мере надобности.
Нужно смотреть API - на предмет переноса атрибутов пользователя и всего прочего.
Далее стоит подумать о UI в профайле и синхронизации.
Ромка, на твоем сайте у меня теперь 2 логина :( по хорошему было бы удобно чтобы контактовская авторизация могла как-то добавляться к существующему пользователю, а то ткнул и завелся новый пользователь :(
- Для комментирования войдите или зарегистрируйтесь
Ромка, на твоем сайте у меня теперь 2 логина :( по хорошему было бы удобно чтобы контактовская авторизация могла как-то добавляться к существующему пользователю, а то ткнул и завелся новый пользователь :(
Может добавить проверку не только по юзернейму, но и по мылу, если есть - авторизовывать.
- Для комментирования войдите или зарегистрируйтесь
Ромка, на твоем сайте у меня теперь 2 логина :( по хорошему было бы удобно чтобы контактовская авторизация могла как-то добавляться к существующему пользователю, а то ткнул и завелся новый пользователь :(
Думал об этом. Это сделать можно, но тогда опять теряется скорость. Сейчас юзер может зарегистрироваться и залогиниться нажатием одной кнопки, а если ему предложить "склеить" свой ВКонтактовский аккаунт с существующим аккаунтом на сайте, то это будет дополнительное действие. Вообще, наверное, сделаю такую опцию в настройках, с помощью которой админ сможет решить давать возможность вконтактовским юзерам склеивать аккаунты с друпальскими учетками или нет.
- Для комментирования войдите или зарегистрируйтесь
Мыло не передается из контакта!!! в этом то и засада
- Для комментирования войдите или зарегистрируйтесь
Кстати, чтобы юзеры не боялись, можно ли как то реализовать сноску, при клике на кнопку "войти по вконтакту", о том, что данные от учётной данных вконтакта, данный сайт (ну где кнопка) не использует?
Ну это уже может сделать каждый владелец сайта по своему желанию. Как разместить эту кнопку в любом месте страницы я пример привел. Таким же образом можно и дополнительный текст рядом с ней разместить.
Нужно вытягивать аватарку юзера из ВКонтакта и использовать ее в Друпал-сайте
Нужно следить за изменениями статусов юзера во ВКонтакте и как-то выводить их на Друпал-сайте
Нужно привязывать логаут из ВКонтакта к логауту из Друпал-сайта
Принял к сведению, в ближайшее время постараюсь докрутить такой функционал к модулю.
- Для комментирования войдите или зарегистрируйтесь
Еще неплохой обзор http://habrahabr.ru/blogs/social_networks/92498/
- Для комментирования войдите или зарегистрируйтесь
Модуль Boost выводит в журнал
Пока еще с бустом модуль потестить не успел, но попробуйте воспользоваться этим советом: http://drupal.org/node/583264#authcache. В настройках буста (admin/settings/performance/boost) нужно снять галочку "Asynchronous Opperation: output HTML, close connection, then store static file". Возможно поможет.
- Для комментирования войдите или зарегистрируйтесь
Ромка, на твоем сайте у меня теперь 2 логина :( по хорошему было бы удобно чтобы контактовская авторизация могла как-то добавляться к существующему пользователю, а то ткнул и завелся новый пользователь :(
- может сделать сноску: "Если у вас уже есть аккаунт на этом сайте, можете связать его с аккаунтом vkontakte, для этого зайдите на сайт под логином и паролем, и нажмите связать в настроках аккаунта", ну или типо того..:)
- а заполнение e-mail-а "обязательным", лучше сделать функционально наверно, что б в настройках модуля админ мог поставить "заполнение e-mail обязательно".
Модуль бомба для СНГ. Спасибо!!!
- Для комментирования войдите или зарегистрируйтесь
- может сделать сноску: "Если у вас уже есть аккаунт на этом сайте, можете связать его с аккаунтом vkontakte, для этого зайдите на сайт под логином и паролем, и нажмите связать в настроках аккаунта", ну или типо того..:)
- а заполнение e-mail-а "обязательным", лучше сделать функционально наверно, что б в настройках модуля админ мог поставить "заполнение e-mail обязательно".
Модуль уже доступен на друпал.орге, сегодня закачаю туда вторую альфу, в ней будут обе эти фичи.
- Для комментирования войдите или зарегистрируйтесь
Ромка, низкий поклон тебе и уважение!!
На днях обязательно потестирую модуль.
З.Ы. А будет ли предусмотрена проверка существования вводимого мыла? Мне кажется это очень немаловажным, ибо при регистрации мыло проверяется, обычно, а тут можно хоть адрес Билла Гейтса вписать...
- Для комментирования войдите или зарегистрируйтесь
DSLRs are often preferred by professional still photographers because they allow an accurate preview of framing close to the moment of exposure, and because DSLRs allow the user to choose from a variety of interchangeable lenses. Most DSLRs also have a function that allows accurate preview of depth of field.mcpd
- Для комментирования войдите или зарегистрируйтесь
Ромка крут, как всегда :)
- Для комментирования войдите или зарегистрируйтесь
а значит более денежная
Ещё бы, на вконтакте рега бесплатная, на одноклассниках 30р!!!
- Для комментирования войдите или зарегистрируйтесь
Ромка герой друпал сообщества!
- Для комментирования войдите или зарегистрируйтесь
Круто! Спасибо!
Пробежался по API вот тут http://vkontakte.ru/page2369282. Я правильно понял что в дальнейшем можно будет добавить фичи, которые будут вытягивать всю инфу из вконтакта (друзья, группы и.т.д.), например для комьюнити на своем сайте? То есть реальна ли в будущем возможность интеграции с такими модулями как friendlist, user relationships?
- Для комментирования войдите или зарегистрируйтесь
Круто! Спасибо!
Пробежался по API вот тут http://vkontakte.ru/page2369282. Я правильно понял что в дальнейшем можно будет добавить фичи, которые будут вытягивать всю инфу из вконтакта (друзья, группы и.т.д.), например для комьюнити на своем сайте? То есть реальна ли в будущем возможность интеграции с такими модулями как friendlist, user relationships?
Да, OpenAPI предоставляет доступ ко всем этим данным (друзья, группы, фотки), но честно говоря, я не планировал использование их в модуле. Если будет необходимость и время, возможно, добавлю такой функционал к модулю, пока же я сосредоточен на авторизации через вконтакт, а не на получении от него доп данных.
- Для комментирования войдите или зарегистрируйтесь
А не раскроете секрет для непосвященных, чем так хороша такого рода интеграция с прикладной точки зрения?
- Для комментирования войдите или зарегистрируйтесь
О, спасибо. Пойду попробую на паре сайтов :)
- Для комментирования войдите или зарегистрируйтесь
Установил. При установке случилась ошибка:
Файл перевода ru.po содержит ошибку: невозможно обработать формулу множественных чисел.
Заглянул в файл - там такой формулы просто нет. Не знаю, насколько это критично :)
Имхо, логичнее поместить настройки в меню управления пользователями.
Выравнивание кнопки входа по центру не везде уместно, лучше вынести стили в цсс-файл, а не хардкодить.
Еще у меня почему-то после нажатия на кнопку ничего не спрашивает, а сразу входит и создает юзера. Это так и должно быть? На демо-сайте открывалось окошко и ждало, пока я кнопку нажму.
Сайт - ivanovsa.ru
- Для комментирования войдите или зарегистрируйтесь
А где можно посмотреть, какого размера аватары отдает контакт?
- Для комментирования войдите или зарегистрируйтесь
Еще очень хочется кнопку в форму комментария...
- Для комментирования войдите или зарегистрируйтесь
Выравнивание кнопки входа по центру не везде уместно, лучше вынести стили в цсс-файл, а не хардкодить.
CSS-файл есть, часть css-ов отдается самим вконтактом.
Еще у меня почему-то после нажатия на кнопку ничего не спрашивает, а сразу входит и создает юзера. Это так и должно быть? На демо-сайте открывалось окошко и ждало, пока я кнопку нажму.
Сайт - ivanovsa.ru
Да, так и задумано. Если посетитель уже авторизован во вконтакте, то для него сразу создается пользователь (если его еще нет) и этот пользователь авторизуется в системе. Если посетитель во вконтакте еще не авторизован, то показывается окно, с предложением ввести логин/пароль вконтакта.
Еще очень хочется кнопку в форму комментария...
Кнопку вставить можно куда угодно, посмотрите пример в первом посте. Или он у вас не сработал?
- Для комментирования войдите или зарегистрируйтесь
Вот альтернатива: http://drupal.ru/node/45330
Кроме контакта, есть еще mail.ru, yandex, rambler, livejournal, google, короче херова туча провайдеров.
Но есть свои нюансы.
- Для комментирования войдите или зарегистрируйтесь
Да, OpenAPI предоставляет доступ ко всем этим данным (друзья, группы, фотки), но честно говоря, я не планировал использование их в модуле. Если будет необходимость и время, возможно, добавлю такой функционал к модулю, пока же я сосредоточен на авторизации через вконтакт, а не на получении от него доп данных.
Главное что возможность есть.
- Для комментирования войдите или зарегистрируйтесь
Модуль супер, а как он работает при использовании мультисайтинга? Нужо что-то добавлять в settings.php?
- Для комментирования войдите или зарегистрируйтесь
Файл есть, но стиль кнопки записан в коде. Он же записан в примере кода в первом посте.
Пример видел, но хочется ж просто галочку в настройке поставить :) "в комментах", "в форме регистрации", "в форме авторизации"...
Кстати, баг: сообщение о возможности склейки с существующим аккаунтом показывается при просмотре профиля другого пользователя, созданного через авторизацию вконтакте.
- Для комментирования войдите или зарегистрируйтесь
Еще очень хочется кнопку в форму комментария...
В идеале, чтобы можно было бы самому прописывать ID формы, к которой эту кнопку втулить
- Для комментирования войдите или зарегистрируйтесь
Кстати, баг: сообщение о возможности склейки с существующим аккаунтом показывается при просмотре профиля другого пользователя, созданного через авторизацию вконтакте.
да, глюк подтверждаю.
заходим (даже под гостем) в профиль пользователя авторизованного через контакт и получаем сообщение "Если у вас уже есть учетная запись на этом сайте выможете объединить ее с текущей. Не показывать это сообщение снова."
причем при нажатии "объединить ее с текущей" получаем сообщение "Вы не можете объединять учетные записи"
Было бы здорово, если бы в профиле пользователя отображалось то, что аккаунт связан с профилем в контакте (как сделано OpenID). И соответственно, чтобы можно было пользователю, авторизовавшись через логин-пароль, зайти в свой аккаунт и уже там связать свой аккаунт с аккаунтов в контакте (опять же как сдалено OpenID) .
- Для комментирования войдите или зарегистрируйтесь
Кстати, баг: сообщение о возможности склейки с существующим аккаунтом показывается при просмотре профиля другого пользователя, созданного через авторизацию вконтакте.
да, глюк подтверждаю.
Ок, поправлю.
Было бы здорово, если бы в профиле пользователя отображалось то, что аккаунт связан с профилем в контакте (как сделано OpenID). И соответственно, чтобы можно было пользователю, авторизовавшись через логин-пароль, зайти в свой аккаунт и уже там связать свой аккаунт с аккаунтов в контакте (опять же как сдалено OpenID) .
Постараюсь реализовать эту фичу в одной из следующих версий модуля.
- Для комментирования войдите или зарегистрируйтесь
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- следующая ›
- последняя »




















Комментарии