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