Как установить и настроить Laravel Socialite

Вход через социальные сети стал стандартом для современных веб-приложений. Пользователи не хотят создавать новый пароль для каждого сайта, а разработчики не хотят заново реализовывать сложную авторизацию. 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 требуется два маршрута:

  1. Редирект на страницу авторизации провайдера.

  2. Обработка возврата пользователя после входа.

В 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-маршрут, где можно получить данные пользователя.

Сохранение пользователя и вход в систему

После получения данных от провайдера обычно выполняются три шага:

  1. Проверка, есть ли пользователь в базе.

  2. Создание нового пользователя при необходимости.

  3. Авторизация в приложении.

Пример:

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.

Комментарии (0)

Войдите, чтобы оставить комментарий

Похожие статьи

Оптимизация Laravel-приложений с Octane

Полное руководство по Laravel Octane: от базовой концепции до настройки, особенностей и сравнения с классическим подходом. Узнайте, как Octane ускоряет Laravel-приложения и когда его стоит использовать.

Как удалить Docker‑образы, контейнеры и тома: подробное руководство

Полное руководство по удалению Docker‑образов, контейнеров и томов. Включены подробные команды, примеры и советы по очистке Docker‑среды для освобождения места на диске.

Как скачивать файлы по URL в Laravel

Подробное руководство по скачиванию файлов из внешних URL в Laravel: от простого стриминга до продакшен-ориентированных подходов с сохранением и раздачей файлов пользователям.