Большинство социальных сетей позволяют использовать свои API для авторизации пользователей на сайте имеющих аккаунт в данной социальной сети. В том числе такая авторизация доступна и в соц.сети Вконтакте.ру, в общем виде процесс авторизации выглядит так:
  1. Посетитель сайта наживает кнопку "Войти через соц.сеть Вконтакте", на сайте открывается специальная страница запрашивающая доступ к определённым данным пользователя (например личные данные и список контактов)
  2. После подтверждения, пользователь будет перенаправлен на специальную страницу сайта, куда Вконтакте передаст код авторизации
  3. Далее сайт выполнит запрос с этим кодом и ключом доступа полученным от vk ранее при регистрации сайта в API, в случае успеха Вконтакте вернёт сайту специальный ключ access_token, которым сайт будет пользоваться для получения параметров пользователя VK и последующей авторизации его на сайте. Обычно происходит сверка email адреса в VK и далее поиск и авторизация пользователя на сайте по полученному от vk email-адресу.
Начнём с регистрации нашего сайта в соц.сети Вконтакте.

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

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

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

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

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

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

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

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

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

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



$vkApiUrl = 'https://oauth.vk.com/authorize';
$params = [
	'client_id'     => 'Идентификатор приложения, со страницы настроек',
	'redirect_uri'  => 'https://it-svalka.ru/verify/', //Доверительный редирект
	'scope'         => 'email',
	'response_type' => 'code',
	'state'         => 'https://it-svalka.ru/vk.php'
];
 
$url = $vkApiUrl . '?' . urldecode(http_build_query($params));
echo '<a href="' . $url . '">Войти на сайт через ВКонтакте</a>';

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

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

После того как пользователь дал согласие, его перенаправит на страницу указанную в параметре 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 <b>' . $data['email'] . '</b> на сайте не зарегистрировано<br/>';
			}
		}
	}
}
Конечно в 1С Битрикс предусмотрен модуль социальных сетей позволяющий организовать подобную авторизацию без написания кода. Данный пример следует воспринимать как учебный. Однако вы так же можете реализовать упрощённую регистрацию пользователей запросив данные о контактах, чтобы сразу найти уже зарегистрированных «друзей» на вашем сайте и т.д. Сценарии могут быть любыми.



Полезная статья?
(Голосов: 2, Рейтинг: 3.1)
Вам также могут понравиться
Английский для программистов

Английский для программистов

Почему IT-специалисту необходимо освоить английский язык? Разбираем в статье.

Как подключить CSS и JS файлы к шаблону 1С Битрикс

Как подключить CSS и JS файлы к шаблону 1С Битрикс

Как правильно подключать стили и скрипты к шаблону 1С Битрикс.

Генерация оглавления статьи

Генерация оглавления статьи

В статье рассмотрен пример функции для генерации оглавления статьи блога или новости


Комментарии
Защита от автоматических сообщений
CAPTCHA
Введите слово на картинке