Большинство социальных сетей позволяют использовать свои 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С Битрикс предусмотрен модуль социальных сетей позволяющий организовать подобную авторизацию без написания кода. Данный пример следует воспринимать как учебный. Однако вы так же можете реализовать упрощённую регистрацию пользователей запросив данные о контактах, чтобы сразу найти уже зарегистрированных «друзей» на вашем сайте и т.д. Сценарии могут быть любыми.



Полезная статья?
(Голосов: 1, Рейтинг: 3.3)

Вам также могут понравиться
Исключения в PHP, что это и как ими пользоваться

Исключения в PHP, что это и как ими пользоваться

В этой статье вы узнаете что такое исключения в PHP и как их использовать для обработки ошибок. Начиная с PHP версии 5.0 стала доступна новая модель обработки ошибок, так называемые исключения. Она позволяет более гибко и информативно для пользователя обрабатывать не стандартные ситуации в работе вашего приложения. 

Загрузка файлов на сервер средствами PHP

Загрузка файлов на сервер средствами PHP

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

Современные способы заработка на сайтах

Современные способы заработка на сайтах

Не для кого не секрет, что в современном мире вы можете зарабатывать определённые деньги на своём сайте ничего не продавая. Говоря «ничего не продавая», я имею ввиду классическую схему, когда вы продаёте свои услуги, перепродаёте товар (предварительно закупая или используя схемы прямой поставки «дроп-шиппинга») или что-то производите. В статье рассмотрим методы, которые не требуют от вас подобных действий. И так, рассмотрим основные методы в порядке возрастания их сложности и времени которое требуется от владельца сайта.


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