Как авторизоваться в контакте
Перейти к содержимому

Как авторизоваться в контакте

  • автор:

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

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

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

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

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

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

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

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

Если кому то понравилось и стало полезным — напишу также статью про FacebookConnect.

Авторизация на сайте при помощи Вконтакте

В первую очередь создайте приложение на странице https://vk.com/editapp?act=create . В свойстве «Платформа» нужно выбрать флажок «Сайт», а так же указать полный адрес сайта и базовый домен.

Регистрация приложения

Далее нужно заполнить форму описания приложения. Здесь обязательно нужно указать ссылки на страницы с пользовательским соглашением и политикой конфиденциальности вашего сайта.

Описание приложения

Теперь перейдите в раздел «Настройки», здесь вам будут доступны такие параметры как «ID приложения», а так же «защищённый ключ» и «сервисный ключ доступа» которые потребуются нам при написании скрипта авторизации. Так же обязательно укажите «Доверительный Redirect URI» (отдельная страница на вашем сайте, это необходимо для сохранности данных пользователя и защиты от злоумышленников).

Настройка, ключи, доверительный редирект урл

Готово, можно приступать к написанию скрипта.

Настройка ссылки для входа

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

При переходе по ссылке, вы попадёте на страницу запроса разрешения.

Запрос разрешения на действия Вконтакте

После того как пользователь дал согласие, его перенаправит на страницу указанную в параметре redirect_uri, в моём случае это такой URL:

 https://it-svalka.ru/verify/?code=71706d4fb3edf76692&state=https://it-svalka.ru/vk.php 

Обратите внимание на параметр code=71706d4fb3edf76692 это специальный ключ, который vk выдал сайту для работы с разрешёнными данными пользователя.

Получение данных из Вконтакте

И так, пропишем скрипт получения данных от vk по только что присланному code.

 if (!empty(trim($_GET['code']))) < $params = [ 'client_id' =>'ID приложения', 'client_secret' => 'Защищённый ключ приложения', 'redirect_uri' => 'https://it-svalka.ru/verify/', 'code' => $_GET['code'] //Код полученный от VK ]; //Запрашиваем токен доступа access_token $data = file_get_contents('https://oauth.vk.com/access_token?' . urldecode(http_build_query($params))); $data = json_decode($data, true); if (!empty($data['access_token'])) < if($data['email'])< //Выполняем авторизацию пользователя по email >> > 

В рамках 1С Битрикс, организовать авторизацию по email можно так:

 if (!empty(trim($_GET['code']))) < $params = [ 'client_id' =>'ID приложения', 'client_secret' => 'Защищённый ключ', 'redirect_uri' => 'https://it-svalka.ru/verify/', 'code' => $_GET['code'] //Код полученный от VK ]; //Запрашиваем токен доступа access_token $data = file_get_contents('https://oauth.vk.com/access_token?' . urldecode(http_build_query($params))); $data = json_decode($data, true); if (!empty($data['access_token'])) < if($data['email'])< //Выполняем арторизацию пользователя по email $userByEmail = \Bitrix\Main\UserTable::getList([ 'select' =>['ID'], 'filter' => ['EMAIL'=>$data['email']] ])->fetch(); if($userByEmail['ID'])< $USER->Authorize($userByEmail['ID']); LocalRedirect('/auth/'); //Редирект на страницу авторизации, для лучшего эффекта > else < echo 'Пользователя с emial ' . $data['email'] . ' на сайте не зарегистрировано
'; > > > >

Конечно в 1С Битрикс предусмотрен модуль социальных сетей позволяющий организовать подобную авторизацию без написания кода. Данный пример следует воспринимать как учебный. Однако вы так же можете реализовать упрощённую регистрацию пользователей запросив данные о контактах, чтобы сразу найти уже зарегистрированных «друзей» на вашем сайте и т.д. Сценарии могут быть любыми.

Как авторизоваться в вк через консольное приложение на nodejs?

Читал мануалы по авторизации в вк, все сводится к тому, что пользователю предлагается перейти на домен https://oauth.vk.com/authorize где он вводит логин и пароль и потом идет перенаправление на сервер, где уже сохраняется полученный access_token. Вопрос в том, как реализовать это через консоль? Т.е. чтобы логин и пароль прописывался непосредственно в консоли. Ожидаемая работа приложения: 1) Пользователь вводит в консоль логин и пароль, 2) Данные отправляются в вк 3) В ответ отправляется токен для работы с методами vk api Наброски приложения на nodejs:

const https = require('https'); let url = 'https://api.vk.com/method/users.get?client_id=6761494&user_id=210700286&v=5.93';// здесь как-то предать логин, пароль function doRequest(url) < https.get(url, (res) => < res.on('data', (d) =>< //токен приходит здесь >); >).on('error', (e) => < console.error(e); >); > doRequest(url); 

Версия nodejs: 10.11.0
Отслеживать
задан 24 ноя 2018 в 11:19
476 5 5 серебряных знаков 14 14 бронзовых знаков
Не думаю что есть юзеры которые будут вводить в консольное приложение свои данные.
24 ноя 2018 в 11:24
@SeeSharp, приложение пишется с открытым исходным кодом, как пример работы, без внешнего интерфейса.
24 ноя 2018 в 11:25

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Вообще, прямая авторизация ВКонтакте доступна только доверенным приложениям. (если интересно, подробнее можно почитать здесь)
Ниже написал небольшой пример авторизации и последующего вызова метода users.get с использованием логина и пароля.

P.S. В примере ниже используется авторизация через оф. приложение для Android, но я всё же настоятельно рекомендую не отходить от правил и договориться с поддержкой о предоставлении доступа к прямой авторизации Вашему приложению.

const request = require('request'); const USER_CREDENTIALS = < login: '', password: '' >const APP_ID = 2274003; const APP_SECRET = 'hHbZxrka2uZ6jB1inYsH'; const AUTH_URL = `https://oauth.vk.com/token?grant_type=password&client_id=$&client_secret=$&username=$&password=` + encodeURIComponent(USER_CREDENTIALS.password); const TEST_REQUEST = 'https://api.vk.com/method/users.get?v=5.86&access_token='; doRequest(AUTH_URL, (err, res) => < if (err) return console.log(err); const response = JSON.parse(res); if (response.error) // что-то пошло не так. return console.log(response.error); // expires - время до истечения жизни токена в секундах. const = response; doRequest(TEST_REQUEST + access_token, (err, response) => < if (err) return console.log(err); console.log(response); >); >); function doRequest(url, callback) < request(url, (err, response, body) =>< if (err) return callback(err); callback(null, body); >); > 

VK начала тестировать функцию авторизации в свои сервисы с помощью Touch ID и Face ID

МОСКВА, 8 июня. /ТАСС/. VK начала тестировать функцию OnePass для авторизации в социальной сети «ВКонтакте», в сервисах компании и партнеров, благодаря которой можно будет заходить в единый аккаунт VK ID с помощью Touch ID и Face ID. Об этом сообщили в пресс-службе «ВКонтакте».

«VK тестирует функцию OnePass для беспарольной авторизации «ВКонтакте», в сервисах VK и партнеров. Пользователи смогут входить в аккаунт VK ID с помощью встроенных в устройства технологий авторизации, к примеру, Touch ID и Face ID. Новые возможности сделают процесс входа в аккаунт еще более быстрым и универсальным», — рассказали в пресс-службе.

OnePass стал доступен части пользователей «ВКонтакте» и сервисов VK в рамках тестирования. Запуск для всей аудитории планируется летом, также функция появится в партнерских сервисах, где доступна авторизация через VK ID.

Функцию поддерживает большинство современных смартфонов, планшетов и ПК. Обработка данных происходит на самом устройстве, они не передаются сервисам VK.

О VK ID

VK ID — аккаунт для быстрой регистрации и авторизации в сервисах VK и партнеров. С помощью VK ID пользователь может подключить двухфакторную аутентификацию, контролировать все авторизации в аккаунт из разных приложений и устройств, получить индивидуальные рекомендации по защите учетной записи.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *