Как на 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 берёт на себя большую часть работы с протоколом.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.