Регистрация на сайте через ВКонтакте
SeoLik

1 июня 2020, 14:17
8674

Мы начинаем цикл статей, в которых расскажем и покажем как сделать для своего сайта очень удобный функционал регистрации и/или авторизации для ваших пользователей на вашем сайте через социальные сети ВКонтакте, Одноклассники, Яндекс, 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 = 'XXXXXXXX'; // ID приложения
$client_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxx'; // Защищённый ключ
$redirect_uri = 'https://site.ru/social_login_callback/vk.php'; // куда ответ

$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://site.ru/social_login/vk.php

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

$client_id = 'XXXXXXX'; // ID приложения
$client_secret = 'xxxxxxxxxxxxxxxxxxxx'; // Защищённый ключ
$redirect_uri = 'https://site.ru/social_login_callback/vk.php'; // куда ответ


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'],
        );

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



	
if ($result) {

echo "Социальный ID пользователя: " . $userInfo['uid'];
echo "Имя пользователя: " . $userInfo['first_name'];
echo "Фамилия пользователя: " . $userInfo['last_name'];
echo "Emai пользователя: " .$email;
echo "Ссылка на профиль пользователя: " . $userInfo['screen_name'];
echo "Пол пользователя: " . $userInfo['sex'];
echo "День Рождения: " . $userInfo['bdate'];
echo "URL к фото: ".$userInfo['photo_big'];

}

}

 

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