Вступление

В интернете есть множество статей и руководств по интеграции OAuth авторизации через популярных провайдеров, таких как Google, Facebook и Twitter, в проекты на Laravel. Но как это сделать через Yandex, ВК и т.п. информации в рунете вообще нет.

Буду показывать на примере Яндекса. Через другие провайдеры делайте аналогично.

Шаг 1. Создание приложения

Для начала регистрируем наше приложение в Yandex OAuth

Вводим название и т.к. используем Laravel - выбираем Веб-сервисы
Вводим название и т.к. используем Laravel - выбираем Веб-сервисы
Вставляем ссылку на страницу, куда б��дет перенаправлен пользователь после авторизации (например на главную)
Вставляем ссылку на страницу, куда будет перенаправлен пользователь после авторизации (например на главную)

После регистрации приложения переходим на страницу нашего приложения и сохраняем эти 3 поля, они нам понадобятся чуть позже.

Шаг 2. Установка Socialite

Устанавливаем Laravel Socialite в наш проект через composer

composer require laravel/socialite

Устанавливаем SocialiteProviders

SocialiteProviders - это расширение для Laravel Socialite, которое добавляет поддержку многих дополнительных OAuth-провайдеров, включая Yandex, ВК, Telegram и другие. Полный список провайдеров на их сайте.

composer require socialiteproviders/yandex

Шаг 3. Настройка проекта

В файле config/services.php добавим настройки для Yandex:

'yandex' => [
    'client_id' => env('YANDEX_CLIENT_ID'),
    'client_secret' => env('YANDEX_CLIENT_SECRET'),
    'redirect' => env('YANDEX_REDIRECT_URI'), ],

Вставляем в .env файл переменные которые нам дал Яндекс:

YANDEX_CLIENT_ID=*ClientID*
YANDEX_CLIENT_SECRET=*Client secret*
YANDEX_REDIRECT_URI=*Redirect URI для веб-сервисов*

Добавим маршруты для перенаправления на Yandex и обработки обратного вызова:

Route::get('login/yandex', [AuthenticatedSessionController::class, 'yandex'])->name('yandex');
Route::get('login/yandex/redirect', [AuthenticatedSessionController::class, 'yandexRedirect'])->name('yandexRedirect');

Добавим необходимые функции в контроллер:

    use Laravel\Socialite\Facades\Socialite;
    use Str;   

   public function yandex() // перенаправляем юзера на яндекс Auth
    {
        return Socialite::driver('yandex')->redirect();
    }

    public function yandexRedirect() // принимаем возвращаемые данные и работаем с ними
    {
        $user = Socialite::driver('yandex')->user();

        $user = User::firstOrCreate([ // используем firstOrCreate для проверки есть ли такие пользователи в нашей БД
            'email' => $user->email
        ], [
            'name' => $user->user['display_name'], // display_name - переменаая хранящая полное ФИО пользователя
                                                  // остальные переменные можете посмотреть использовав $dd('$user')
            'password' => Hash::make(Str::random(24)),
        ]);

        Auth::login($user, true);

        redirect()->route('main');
    }

Ставив на кнопку "войти через яндекс" наш первый маршрут и готово. По такой же схеме делаете telegram, vk и другие сервисы указанные в socialiteproviders.