Вход через социальные сети стал стандартом для современных веб-приложений. Пользователи не хотят создавать новый пароль для каждого сайта, а разработчики не хотят заново реализовывать сложную авторизацию. Laravel Socialite решает эту задачу. Библиотека позволяет быстро подключить вход через Google, GitHub, Facebook и другие сервисы.
Разберёмся, как установить Socialite, настроить провайдеров и организовать авторизацию в Laravel-приложении.
Установка Laravel Socialite
Socialite распространяется как официальный пакет Laravel. Установка выполняется через Composer:
composer require laravel/socialiteПосле установки библиотека автоматически становится доступной в приложении.
Настройка OAuth-провайдера
Чтобы авторизация работала, нужно зарегистрировать приложение у выбранного провайдера и получить:
client_id
client_secret
redirect URL
Эти данные добавляются в файл config/services.php.
Пример для GitHub:
'github' => [
'client_id' => env('GITHUB_CLIENT_ID'),
'client_secret' => env('GITHUB_CLIENT_SECRET'),
'redirect' => env('GITHUB_REDIRECT_URI'),
],Реальные значения лучше хранить в файле .env, чтобы не публиковать их в репозитории.
Создание маршрутов авторизации
Для работы OAuth требуется два маршрута:
Редирект на страницу авторизации провайдера.
Обработка возврата пользователя после входа.
В routes/web.php это может выглядеть так:
use Laravel\Socialite\Facades\Socialite;
Route::get('/auth/github/redirect', function () {
return Socialite::driver('github')->redirect();
});
Route::get('/auth/github/callback', function () {
$githubUser = Socialite::driver('github')->user();
});Метод redirect() отправляет пользователя на страницу входа GitHub. После успешной авторизации провайдер возвращает его на callback-маршрут, где можно получить данные пользователя.
Сохранение пользователя и вход в систему
После получения данных от провайдера обычно выполняются три шага:
Проверка, есть ли пользователь в базе.
Создание нового пользователя при необходимости.
Авторизация в приложении.
Пример:
use App\Models\User;
use Illuminate\Support\Facades\Auth;
Route::get('/auth/github/callback', function () {
$githubUser = Socialite::driver('github')->user();
$user = User::updateOrCreate(
['github_id' => $githubUser->id],
[
'name' => $githubUser->name,
'email' => $githubUser->email,
'github_token' => $githubUser->token,
]
);
Auth::login($user);
return redirect('/dashboard');
});Метод updateOrCreate позволяет избежать дублирования записей. После этого пользователь автоматически считается авторизованным.
Работа с дополнительными правами доступа
Иногда стандартных разрешений недостаточно. Например, если нужно получить доступ к репозиториям GitHub.
Добавить дополнительные scope можно так:
return Socialite::driver('github')
->scopes(['read:user', 'public_repo'])
->redirect();Если требуется полностью заменить набор разрешений, используйте setScopes().
Передача дополнительных параметров
Некоторые провайдеры позволяют передавать дополнительные параметры авторизации.
Пример для Google:
return Socialite::driver('google')
->with(['hd' => 'example.com'])
->redirect();Это может быть полезно для ограничения входа пользователями определённого домена.
Получение данных пользователя
После авторизации объект пользователя содержит основные данные:
$user = Socialite::driver('github')->user();
$user->getId();
$user->getName();
$user->getEmail();
$user->getAvatar();
$token = $user->token;
$refreshToken = $user->refreshToken;
$expiresIn = $user->expiresIn;Набор доступных данных зависит от конкретного провайдера и версии OAuth.
Получение пользователя по токену
Если у вас уже есть сохранённый access token, можно получить данные без повторной авторизации:
$user = Socialite::driver('github')->userFromToken($token);Это удобно при работе с API или фоновой синхронизации.
Stateless-режим
По умолчанию Socialite использует сессии Laravel. Если вы разрабатываете API без сессионной авторизации, можно включить stateless-режим:
$user = Socialite::driver('google')->stateless()->user();В этом случае проверка состояния отключается, что подходит для SPA и мобильных приложений.
Laravel Socialite значительно упрощает интеграцию социальных логинов. Настройка занимает минимум времени: установка через Composer, добавление ключей в конфигурацию и создание двух маршрутов. Библиотека поддерживает работу с токенами, дополнительными разрешениями и stateless-режимом, что делает её удобным решением как для классических веб-приложений, так и для API.