Как на PHP реализовать авторизацию пользователей через Google (OAuth 2.0 API)?
Авторизация через Google OAuth 2.0 на PHP — стандартный способ реализовать вход через аккаунт Google без хранения паролей пользователей. Разберём процесс пошагово.
## 1. Создание проекта в Google Cloud Console
Перейдите на console.cloud.google.com, создайте новый проект. В разделе «APIs & Services» → «Credentials» нажмите «Create Credentials» → «OAuth 2.0 Client ID». Выберите тип «Web application», укажите авторизованные URI перенаправления, например: https://yourdomain.com/callback.php.
После создания вы получите CLIENT_ID и CLIENT_SECRET — сохраните их.
## 2. Установка библиотеки через Composer
Рекомендуется использовать официальную библиотеку:
composer require google/apiclient:^2.0
## 3. Генерация ссылки для авторизации (login.php)
php
require ‘vendor/autoload.php’;
$client = new GoogleClient();
$client->setClientId(‘ВАШ_CLIENT_ID’);
$client->setClientSecret(‘ВАШ_CLIENT_SECRET’);
$client->setRedirectUri(‘https://yourdomain.com/callback.php’);
$client->addScope(’email’);
$client->addScope(‘profile’);
$authUrl = $client->createAuthUrl();
header(‘Location: ‘ . $authUrl);
exit;
## 4. Обработка callback и получение данных пользователя (callback.php)
php
require ‘vendor/autoload.php’;
session_start();
$client = new GoogleClient();
$client->setClientId(‘ВАШ_CLIENT_ID’);
$client->setClientSecret(‘ВАШ_CLIENT_SECRET’);
$client->setRedirectUri(‘https://yourdomain.com/callback.php’);
if (isset($_GET[‘code’])) {
$token = $client->fetchAccessTokenWithAuthCode($_GET[‘code’]);
$client->setAccessToken($token);
$oauth2 = new GoogleServiceOauth2($client);
$userInfo = $oauth2->userinfo->get();
$_SESSION[‘user_id’] = $userInfo->id;
$_SESSION[‘user_email’] = $userInfo->email;
$_SESSION[‘user_name’] = $userInfo->name;
header(‘Location: /dashboard.php’);
exit;
}
## 5. Важные моменты безопасности
— Всегда используйте HTTPS для redirect URI.
— Проверяйте state-параметр для защиты от CSRF-атак: генерируйте случайную строку, сохраняйте в сессии и сравнивайте при callback.
— Не храните access_token в открытом виде в базе данных без шифрования.
— Проверяйте, что полученный email верифицирован: $userInfo->verifiedEmail === true.
## 6. Сохранение пользователя в базе данных
После получения данных от Google проверьте, существует ли пользователь с таким google_id в вашей БД. Если нет — создайте новую запись. Если да — обновите данные и создайте сессию.
## Итог
Реализация OAuth 2.0 через Google позволяет упростить регистрацию, повысить безопасность и улучшить пользовательский опыт. Библиотека google/apiclient берёт на себя большую часть работы с протоколом.
