SeoLik

1 июня 2020, 14:12
47

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

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

Создание нового приложения

Чтобы создать новое приложение перейдите по этой ссылке и нажмите на кнопку "Создать"

google создание веб приложения

Теперь можно изменить название приложения, при необходимости, и нужно нажать на кнопку "Создать"

Процесс создания может занимать некоторое время. Не уходите со страницы.

Теперь выбираем "Создать учетные данные" и Идентификатор клиента OAuth.

создание OAuth 2.0 Google

 

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

 

В разделе Тип приложения выбираем Веб-приложение

Заполняем поле "Разрешенные URI перенаправления", указав полный путь к файлу обработчика, например https://site.ru/social_login_callback/google.php

Нажимаем кнопку Создать.

На появившейся странице копируем идентификатор и секретный ключ клиента – они понадобятся нам при настройке нашего скрипта.

идентификатор и секретный ключ клиента

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

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

$client_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // Client ID
$client_secret = 'XXXXXXXXXXXXXXXXXXXXXXX'; // Client secret
$redirect_uri = 'https://site.ru/social_login_callback/google.php'; // Redirect URI



$url = 'https://accounts.google.com/o/oauth2/auth';

$params = array(
    'redirect_uri'  => $redirect_uri,
    'response_type' => 'code',
    'client_id'     => $client_id,
    'scope'         => 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile'
);


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

 

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

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

$client_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // Client ID
$client_secret = 'XXXXXXXXXXXXXXXXXXXXXXX'; // Client secret
$redirect_uri = 'https://site.ru/social_login_callback/google.php'; // Redirect URI


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

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

    $url = 'https://accounts.google.com/o/oauth2/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['access_token'] = $tokenInfo['access_token'];

        $userInfo = json_decode(file_get_contents('https://www.googleapis.com/oauth2/v1/userinfo' . '?' . urldecode(http_build_query($params))), true);
        if (isset($userInfo['id'])) {
            $userInfo = $userInfo;
            $result = true;
        }
    }
	
/*	дополнительные данные

print_r($userInfo);
	
*/	
	
$email =$userInfo['email']; // почта юзера

}

 

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

Документация Google