Pull to refresh

Авторизация через ВКонтакте

PHP *
Сколько процентов пользователей вашего сайта являются также пользователями ВКонтакте? Как по вашему, сколько человек ничего не пишут / комментируют / добавляют (нужное подчеркнуть), лишь потому, что им лень регистрироваться на еще одном непонятном сайте в 100й раз? Предлагаю ответить для себя на эти 2 вопроса, прежде, чем ругать ВКонтакте и Open API.

В моем случае на сайт из ВКонтакте каждый день приходят около 1500 человек и обеспечить им простой и удобный способ регистрации, как мне кажется, является моим долгом.

Вряд ли я открою что то новое, но если, хотя бы еще 1 сайт станет немного удобнее после этой статьи — значит я не зря потратил свое время на написание этого текста.

Я писал модуль Open API авторизации для сайта на PHP, поэтому весь код будет на нем. Для Django также была статья.

Исходный код простейшего примера доступен на github'е. Здесь его перепечатывать не буду, лишь вкратце расскажу, как это работает.

Основную работу выполняет класс Auth_Vkontakte, содержащий 3 метода:
  • is_auth — Возвращает ID пользователя ВКонтакте, в случае, если пользователь не авторизован через Open API — возвращает false
  • logout — Разлогинивает пользователя, очищая куку, которую добавляет ВКонтакте. Лучшего способа я не нашел. Есть у Open API метод logout, но у меня он работал через раз.
  • render_login_form — Возвращает HTML код для отображения кнопки «Войти ВКонтакте», включая все необходимые script'ы.

Вам, конечно, придется также добавить поддержку vkontakte в ваш движок сайта, например, добавить в табличку пользователя поле «vk_id», в котором будет хранится ID пользователя ВКонтакте.

Алгоритм работы в реальных условиях примерно такой:
  1. После входа пользователя вконтакте перекидываем его на отдельную страницу (в моем случае это vk.php), где проверяем, зарегистрирован ли уже пользователь с таким vk_id. Если нет — показываем ему упрощенную форму регистрации (например, только логин и email). После чего создаем пользователя и перекидываем только что зарегистрированного посетителя на главную страницу.
  2. Создаем backend, который будет проверять куку ВКонтакте через Auth_Vkontakte::is_auth, в случае, когда посетитель не вошел на ваш сайт никаким способом. Если is_auth возвращает значение, отличное от false и пользователь с таким id зарегистирован на вашем сайте — авторизируем через вашу систему пользователей. Если вдруг так оказалось, что он не зарегистирован — вновь показываем форму регистрации.
  3. При logout удаляем кроме вашей куки также куку из ВКонтакте (метод Auth_Vkontakte::logout)

Вообще, как мне кажется, подобными примерами должна начинаться любая документация по любому API. Разработчики ВКонтакте, однако, так не думают и понять Open API по их документации невозможно. Фактически, я ей и не пользовался — все прочитал лишь в исходниках на durov.at.
Неужто компания ВКонтакте не может позволить себе нанять нормального технического писателя, который бы писал примеры и нормальные мануалы, а не сухие списки функций с кратким описанием параметров, которые она принимает?

Для того, что попробовать тестовый пример в работе (который, правда, ничего кроме вашего ID не покажет) достаточно скачать исходники, и настроить локальный веб-сервер на адрес: openapi.lc (добавить в hosts: 127.0.0.1 openapi.lc).

Если кому то понравилось и стало полезным — напишу также статью про FacebookConnect.
Tags:
Hubs:
Total votes 145: ↑100 and ↓45 +55
Views 60K
Comments Comments 79