Вход на сайт через Вконтакте

Многие соцсети позволяют создавать приложения и через API получать данные пользователей, поэтому их использует для быстрой регистрации и авторизации на сайтах. Как проходит аутентификация, рассмотрим на примере VK:

  1. На сайте, пользователь нажимает на ссылку «Войти», открывается страница VK, где он разрешит приложению доступ к своим данным.
  2. После подтверждения браузер пользователя будет перенаправлен по адресу, указанному при открытии диалога авторизации. К URL добавляется GET-параметр с кодом авторизации.
  3. Скрипт выполняет ответный запрос с полученным кодом и ключом приложения для получения access_token.
  4. Полученный в ответе access_token, скрипт использует для запроса к данным пользователя.
1

Для начала нужно создать приложение на странице https://vk.com/editapp?act=create

В меню «Платформа» нужно указать – сайт, заполнить поля «адрес сайта» и «основной домен».

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

2

Сформируем и выведем ссылку по которой пользователь даст разрешение на запрошенные действия.

$params = array(
	'client_id'     => 'ID приложения',
	'redirect_uri'  => 'https://example.com/oauth-vk.php',
	'scope'         => 'email',
	'response_type' => 'code',
	'state'         => 'https://example.com/page-1'
);

$url = 'https://oauth.vk.com/authorize?' . urldecode(http_build_query($params));
echo '<a href="' . $url . '">Войти через ВКонтакте</a>';
PHP

В redirect_uri указываем скрипт-обработчик, туда придет секретный код.

В параметре state можно передать URL текущей страницы, чтобы вернуть пользователя обратно.

При переходе по ссылке откроется страница:

3

После того как пользователь дал разрешение, он возвращается на redirect_uri, к URL добавляются GET-параметры:
https://example.com/oauth-vk.php?code=1234567890&state=https://example.com/page-1

Далее запрашивается access_token (в ответе с токеном будет e-mail). После этого выполняется метод users.get, который возвращает ID, имя, фамилию и URL аватарки.

redirect_uri должен быть такой же как в ссылке для входа.

<?php
if (!empty($_GET['code'])) {
	$params = array(
		'client_id'     => 'ID приложения',
		'client_secret' => 'Защищённый ключ',
		'redirect_uri'  => 'https://example.com/oauth-vk.php',
		'code'          => $_GET['code']
	);
	
	// Получение 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'])) {
		// Получили email
		$email = $data['email'];

		// Получим данные пользователя
		$params = array(
			'v'            => '5.81',
			'uids'         => $data['user_id'],
			'access_token' => $data['access_token'],
			'fields'       => 'photo_big',
		);

		$info = file_get_contents('https://api.vk.com/method/users.get?' . urldecode(http_build_query($params)));
		$info = json_decode($info, true);	
		
		echo $email;
		print_r($info);
	}
}
PHP

Полученные данные пользователя

xxxx@xx.ru

array(
	"response" => array(
    	0 => array(
        	"id" => 12345678,
            "first_name" => "Иван",
            "last_name" => "Иванов",
            "photo_big" => "https://vk.com/images/camera_200.png?ava=1"
		)
	)
)

Далее все завит от реализации сайта, пользователя можно добавить в БД или обновить его данные и авторизовать в системе.

08.10.2019, обновлено 09.10.2021
56956
Предыдущая запись Работа с API Instagram
Следующая запись Бот Телеграм на PHP

Комментарии

, чтобы добавить комментарий.

Другие публикации

Авторизация через GitHub
GitHub имеет свой API для авторизации по OAuth, что позволяет сделать авторизацию зарегистрированных там пользователей на своем сайте.
5338
+3
Авторизация на сайте через Яндекс
Сервис Яндекс.Паспорт позволяет через API реализовать авторизацию пользователя на своем сайте. После разрешения доступа...
16767
+7
Вход через Google
Сервис «Google Аккаунты» позволяет через протокол OAuth 2.0 реализовать авторизацию пользователя на своем сайте. После прохождения авторизации можно получить имя, фамилию, e-mail и юзерпик...
36087
+17
Как сделать редирект PHP
На страницах сайтов постоянно что-то добавляется, удаляется и обновляется, чтобы в поисковиках была только актуальная информация и нужные страницы не выпадали из поиска применяются редиректы.
23998
+13
Примеры использования cURL в PHP
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS....
220267
+21
PHP-класс обертка для PDO
Класс значительно упрощает работу с PDO, сокращает код. Реализован на статических классах и не требует создание экземпляра класса.
23034
+11