Сервис «Google Аккаунты» позволяет через протокол OAuth 2.0 реализовать авторизацию пользователя на своем сайте. После прохождения авторизации можно получить имя, фамилию, e-mail и изображение пользователя.
Регистрация приложения
Первым делом необходимо создать новый проект на https://console.developers.google.com/cloud-resource-manager.
Далее, прейти в раздел «API и сервисы» → «Окно запроса доступа OAuth».
И заполнить форму, в которой требуется указать: название приложения, email для связи, домен вашего сайта, ссылки на главную сайта и политику конфиденциальности.
После отправки формы будет предложено создать учетную запись, в списке нужно выбрать «Идентификатора клиента OAuth».
Тип: веб-приложение, в «URI перенаправление» нужно указать адрес вашего PHP скрипта-обработчика, например https://example.com/login_google.php
.
После этого получим индификатор клиента и ключ.
Ссылка для входа
Сформируем ссылку для авторизации пользователя:
$params = array( 'client_id' => 'ИНДИФИКАТОР_КЛИЕНТА', 'redirect_uri' => 'https://example.com/login_google.php', 'response_type' => 'code', 'scope' => 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile', 'state' => '123' ); $url = 'https://accounts.google.com/o/oauth2/auth?'.urldecode(http_build_query($params)); echo '<a href="'.$url.'">Авторизация через Google</a>';
Перейдя по такой ссылки увидим следующий запрос:
Код скрипта
После подтверждения запроса, будет выполнен редирект на указанный PHP-скрипт, в GET-параметр добавится код авторизации, меняем его на токен и получаем данные пользователя.
<?php if (!empty($_GET['code'])) { // Отправляем код для получения токена (POST-запрос). $params = array( 'client_id' => 'ИНДИФИКАТОР_КЛИЕНТА', 'client_secret' => 'СЕКРЕТ_КЛИЕНТА', 'redirect_uri' => 'https://example.com/login_google.php', 'grant_type' => 'authorization_code', 'code' => $_GET['code'] ); $ch = curl_init('https://accounts.google.com/o/oauth2/token'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $data = curl_exec($ch); curl_close($ch); $data = json_decode($data, true); if (!empty($data['access_token'])) { // Токен получили, получаем данные пользователя. $params = array( 'access_token' => $data['access_token'], 'id_token' => $data['id_token'], 'token_type' => 'Bearer', 'expires_in' => 3599 ); $info = file_get_contents('https://www.googleapis.com/oauth2/v1/userinfo?' . urldecode(http_build_query($params))); $info = json_decode($info, true); print_r($info); } }
Результат:
Array(
'id' => '123456789123456789',
'email' => 'mail@example.com',
'verified_email' => true,
'name' => 'Иван Иванов',
'given_name' => 'Иван',
'family_name' => 'Иванов',
'picture' => 'https://.../photo.jpg',
'locale' => 'ru'
}
Кстати, Имя и Фамилия пользователя могут быть не указаны.