SeoLik

1 июня 2020, 14:26
265

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

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

 

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

Чтобы создать новое приложение перейдите по этой ссылке. Заполняем поля формы, достаточно заполнить название и указать платформу Веб сервисы, указав в поле Callback URI #1: полный путь в файлу yandex.php в папке social_login_callback на вашем сайте. И выбираем "Доступы", в нашем случае для того чтобы зарегистрировать юзера на своем сайте нужен его e-mail, поэтому выбираем в Яндекс Паспорт поле доступа к адресу почты.

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

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

доступы

Теперь, в самом низу страницы, нажимаем на кнопку Создать приложение

Нам доступны данные созданного приложения, которые нужно записать в файл, а именно нам нужны такие данные как: ID и пароль.

Переходим к написанию кода

Создаем файл yandex.php в папке social_login и записываем в него код:

$client_id = 'XXXXXXXXXXXXXXXXXXXXXXX'; // Id приложения
$client_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; // Пароль приложения
$redirect_uri = 'https://seolik.ru/social_login_callback/yandex.php'; // Callback URI

$url = 'https://oauth.yandex.ru/authorize';

$params = array(
    'response_type' => 'code',
    'client_id'     => $client_id,
    'display'       => 'popup'
);
	

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

 

Теперь ссылка вида http://site.ru/social_login/yandex.php будет для того чтобы пользователь инициировал регистрацию через Яндекс.

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

$client_id = 'XXXXXXXXXXXXXXXXXXXXXXX'; // Id приложения
$client_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; // Пароль приложения
$redirect_uri = 'https://seolik.ru/social_login_callback/yandex.php'; // Callback URI



if (isset($_GET['code'])) {
    $result = false;

    $params = array(
        'grant_type'    => 'authorization_code',
        'code'          => $_GET['code'],
        'client_id'     => $client_id,
        'client_secret' => $client_secret
    );

    $url = 'https://oauth.yandex.ru/token';

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, urldecode(http_build_query($params)));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    $result = curl_exec($curl);
    curl_close($curl);

    $tokenInfo = json_decode($result, true);

    if (isset($tokenInfo['access_token'])) {
        $params = array(
            'format'       => 'json',
            'oauth_token'  => $tokenInfo['access_token']
        );

        $userInfo = json_decode(file_get_contents('https://login.yandex.ru/info' . '?' . urldecode(http_build_query($params))), true);
        if (isset($userInfo['id'])) {
            $userInfo = $userInfo;
            $result = true;
        }
    }
	
$email = $userInfo['default_email']; // тут e-mail юзера


/*	
print_r($userInfo);
*/

}

 

Ссылки по теме:

Документация Яндекс