Аутентификация на сайте через ВКонтакте


27 мая 2018, 15:42
206

Мы начинаем цикл статей, в которых расскажем и покажем как сделать для своего сайта очень удобный функционал регистрации и/или авторизации для ваших пользователей на вашем сайте через социальные сети ВКонтакте, Одноклассники, Яндекс, Google и Mail.ru.

В данной статье рассмотрим регистрацию на сайте через социальную сеть ВКонтакте.

Создайте в корне своего сайта 2 папки, например social_login и social_login_callback. В первой будут храниться файлы для использования их в качестве прямых ссылок на инициализацию аутентификации в социальной сети, а во второй обработчики ответов от социальных сетей

Создайте новое приложение в социальной сети ВКонтакте

В открывшейся форме введите название приложения, выберите тип “Веб-сайт”, укажите адреса сайта и базовый домен сайта.

создание приложения вконтакте

После нажатия на кнопку “Подключить сайт”, вам придётся ввести проверочный код, который придёт по смс. После ввода кода, перейдите в раздел Настройки.

настройки приложения вконтакте

Из данной формы нам понадобятся такие данные, как `ID приложения`, `Защищённый ключ`, `Доверенный redirect URI:`.

Доверенный redirect URI: вам нужно прописать полный путь к файлу обработчика ответа от социальной сети, в нашем случае: https://seolik.ru/social_login_callback/vk.php

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

Создаем файл vk.php в папке social_login (пример можно будет скачать в конце статьи) и записываем в него код:

 


$client_id = '6491658'; // ID приложения
$client_secret = 'wfUaDyqdkcAdpZSWXYnu'; // Защищённый ключ
$redirect_uri = 'https://seolik.ru/social_login_callback/vk.php'; // Доверенный redirect URI

$url = 'https://oauth.vk.com/authorize';

$params = array(
        'client_id'     => $client_id,
		'scope'         => 'email',
        'redirect_uri'  => $redirect_uri,
        'response_type' => 'code'

);
header('Location: '. $url . '?' . urldecode(http_build_query($params)) ); exit();

Теперь у нас готова ссылка при переходе по которой пользователь инициирует авторизацию через социальную сеть, а именно ссылка имеет вид https://seolik.ru/social_login/vk.php

Для того, чтобы получить ответ от социальной сети и  email юзера создадим файл vk.php, но теперь в папке social_login_callback и запишем в него следующий код:


$client_id = '6491658'; // ID приложения
$client_secret = 'wfUaDyqdkcAdpZSWXYnu'; // Защищённый ключ
$redirect_uri = 'https://seolik.ru/social_login_callback/vk.php'; // Доверенный redirect URI

if (isset($_GET['code'])) {
$result = false;
$params = array(
        'client_id' => $client_id,
        'client_secret' => $client_secret,
        'code' => $_GET['code'],
        'redirect_uri' => $redirect_uri,
    );

    $token = json_decode(file_get_contents('https://oauth.vk.com/access_token' . '?' . urldecode(http_build_query($params))), true);

    if (isset($token['access_token'])) {
        $params = array(
            'uids'         => $token['user_id'],
            'fields'       => 'uid,first_name,last_name,screen_name,sex,bdate,photo_big',
            'access_token' => $token['access_token'],
			'v' => '5.71',
        );

        $userInfo = json_decode(file_get_contents('https://api.vk.com/method/users.get' . '?' . urldecode(http_build_query($params))), true);
		
		$email = $token['email']; // получение email юзера
		
		
        if (isset($userInfo['response'][0]['uid'])) {
            $userInfo = $userInfo['response'][0];
            $result = true;
        }
    }


if ($email)
{
echo 'Email пользователя: ' . $email;
}else{
echo 'У пользователя нет email';
}

	
if ($result) {
// тут все основные данные (если они заполнены юзером)
echo 'Социальный ID пользователя: ' . $userInfo['uid'];

echo 'Имя пользователя: ' . $userInfo['first_name'];

echo 'Фамилия пользователя: ' . $userInfo['last_name'];

echo 'Ссылка на профиль пользователя: ' . $userInfo['screen_name'];

echo 'Пол пользователя: ' . $userInfo['sex'];

echo 'День Рождения: ' . $userInfo['bdate'];

echo '<img src="'. $userInfo['photo_big'].'" />';

}	
	
// тут ваш код который создаст аккаунт на вашем сайте с подтвержденным email юзера	
	
	
// тут ваш код который создаст аккаунт на вашем сайте с подтвержденным email юзера	
	
header("Location: /"); exit();// делаем редирект куда нам нужно
}

Т.е теперь при успешном ответе от социальной сети, т.е если юзер разрешил доступ к своей информации и у него указан email в настройках профиля, в ответе вы получите данные о нем, в том числе и его email. Ну а дальше дело за вами, создавайте для него аккаунт у вас на сайте на основе его email.

СКАЧАТЬ ПРИМЕР

СМОТРЕТЬ ПРИМЕР