Хочешь, чтобы пользователи могли залогиниться через Facebook или Google и не морочиться с паролями? Socialite вроде как решает эту задачу. Но приготовься: «просто подключил и работает» в Laravel не всегда проходит.

Шаг 1: Установка

composer require laravel/socialite

Требуется Laravel 5.5 и выше. Да, старый проект с 5.4 — забудь.

Шаг 2: Настройка сервисов

В config/services.php добавляем конфиг для нужного провайдера, например Facebook:

'facebook' => [
    'client_id' => env('FACEBOOK_CLIENT_ID'),
    'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
    'redirect' => env('FACEBOOK_REDIRECT_URI'),
],

И не забудь переменные в .env. Иначе будет «ничего не работает, но ошибок нет».

Шаг 3: Маршруты и контроллер

В routes/web.php:

Route::get('login/{provider}', 'Auth\LoginController@redirectToProvider');
Route::get('login/{provider}/callback', 'Auth\LoginController@handleProviderCallback');

В LoginController:

use Laravel\Socialite\Facades\Socialite;

public function redirectToProvider($provider)
{
    return Socialite::driver($provider)->redirect();
}

public function handleProviderCallback($provider)
{
    $user = Socialite::driver($provider)->user();

    // тут у тебя $user->token, имя, email и куча всего
}

Да, иногда Facebook возвращает не то, что ожидаешь, и приходится ловить ошибки руками.

Шаг 4: Работа с пользователем

После аутентификации у тебя есть объект $user с данными пользователя.
Можно создать или обновить учетку в базе:

$existingUser = User::where('email', $user->getEmail())->first();

if ($existingUser) {
    // апдейт токена и логин
} else {
    User::create([
        'name' => $user->getName(),
        'email' => $user->getEmail(),
        'provider' => $provider,
        'provider_id' => $user->getId(),
    ]);
}

Небольшой костыль, но Socialite не знает твоей логики.

Шаг 5: Тестирование

Тестируй всё. Facebook, Google и Twitter могут прислать неожиданные значения, редиректы ломаются, токены живут не вечно.

Итог

Socialite — крутая штука, когда нужно «быстро сделать вход через соцсети». Но, как и в любой магии Laravel, придётся ковыряться с мелкими багами, переменными окружения и кейсами вроде «пользователь с таким email уже есть».