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


После регистрации приложения переходим на страницу нашего приложения и сохраняем эти 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.
