Ой, ничего не найдено!

К сожалению, по вашему запросу пока ничего нет (но это только пока!), зато вы можете подписаться на нашу замечательную email-рассылку, чтобы не пропустить самое интересное в будущем.

  • 257

Laravel Socialite для аутентификации пользователей через ВКонтакте

  • 3 минуты на чтение

Ниже приведена базовая пошаговая инструкция по использованию пакета socialiteproviders/vkontakte вместе с Laravel Socialite для аутентификации пользователей через ВКонтакте:

1. Установка пакета

Установите сам провайдер ВКонтакте (если ещё не установлен):

composer require socialiteproviders/vkontakte

Убедитесь, что базовый laravel/socialite уже установлен (обычно он идёт по умолчанию, но если вдруг нет, выполните):

composer require laravel/socialite

2. Регистрация приложения в ВКонтакте

  1. Перейдите на https://vk.com/apps?act=manage (или https://vk.com/editapp?act=create, если у вас нет ни одного приложения).

  2. Нажмите «Создать приложение» или «Добавить приложение».

  3. Заполните обязательные поля (например, название, описание) и т.д.

  4. В разделе «Настройки» вашего приложения ВКонтакте получите:

    • ID приложения (Client ID)
    • Защищённый ключ (Client Secret)
  5. В настройках авторизации задайте «Своё redirect URI», который будете использовать в Laravel (например, https://your-domain.com/auth/vkontakte/callback).

3. Настройки в Laravel (файл config/services.php)

Добавьте следующий массив в config/services.php:

'vkontakte' => [ 'client_id' => env('VKONTAKTE_CLIENT_ID'), 'client_secret' => env('VKONTAKTE_CLIENT_SECRET'), 'redirect' => env('VKONTAKTE_REDIRECT_URI'), ],

И в файле .env пропишите соответствующие переменные окружения:

VKONTAKTE_CLIENT_ID=Ваш_ID_приложения_ВК VKONTAKTE_CLIENT_SECRET=Ваш_ключ_приложения_ВК VKONTAKTE_REDIRECT_URI=https://your-domain.com/auth/vkontakte/callback

Важно: Убедитесь, что адрес, который вы здесь указали, совпадает с тем, который прописан в настройках приложения ВКонтакте.

4. Регистрация провайдера (Event Listener)

Для Laravel 11+

В Laravel 11 нет готового EventServiceProvider по умолчанию, поэтому добавьте привязку к событию в метод boot своего AppServiceProvider или другого подходящего провайдера.
Откройте app/Providers/AppServiceProvider.php и в метод boot() добавьте:

Подключение за минуту
Попробуйте Siteko.net бесплатно в течение месяца
Проверьте хостинг на реальном сайте: скорость, стабильность и поддержка доступны сразу после подключения.
Начать бесплатно
use Illuminate\Support\Facades\Event; use SocialiteProviders\Manager\SocialiteWasCalled; use SocialiteProviders\VKontakte\Provider; public function boot() { Event::listen(function (SocialiteWasCalled $event) { $event->extendSocialite('vkontakte', Provider::class); }); }

Для Laravel 10 и ниже

В app/Providers/EventServiceProvider.php (или другом провайдере ивентов) добавьте:

protected $listen = [ \SocialiteProviders\Manager\SocialiteWasCalled::class => [ 'SocialiteProviders\\VKontakte\\VKontakteExtendSocialite@handle', ], ];

Или, используя ту же концепцию, что и для Laravel 11 (через метод boot и Event::listen).

5. Использование в контроллерах или маршрутах

После того как всё настроено, используйте драйвер vkontakte так же, как и любой другой драйвер Socialite.

Пример маршрутов (routes/web.php)

use Illuminate\Support\Facades\Route; use Laravel\Socialite\Facades\Socialite; Route::get('/auth/vkontakte', function () { // Редирект на страницу авторизации ВКонтакте return Socialite::driver('vkontakte')->redirect(); })->name('vkontakte.login'); Route::get('/auth/vkontakte/callback', function () { // Получаем информацию о пользователе, после того, как он разрешил доступ $user = Socialite::driver('vkontakte')->user(); // Доступные поля (пример): // $user->getId(); // $user->getNickname(); // $user->getName(); // $user->getEmail(); // $user->getAvatar(); // Логика по добавлению пользователя в БД или авторизации в системе // Например: // $existingUser = User::where('email', $user->getEmail())->first(); // if ($existingUser) { // Auth::login($existingUser); // } else { // $newUser = User::create([ // 'name' => $user->getName(), // 'email' => $user->getEmail(), // // ... // ]); // Auth::login($newUser); // } // Затем перенаправляете куда нужно return redirect('/home'); });

Здесь важные моменты:

  1. Маршрут auth/vkontakte – перенаправление пользователя для авторизации через ВКонтакте.
  2. Маршрут auth/vkontakte/callback – указанный в redirect (и в настройках .env и VK) маршрут, на который будет приходить ответ после авторизации.

6. Получение дополнительных полей (опционально)

Если хотите получать больше данных о пользователе, можно указывать scope (permissions) при редиректе. Например, если вам нужны email или друзья пользователя:

return Socialite::driver('vkontakte') ->scopes(['email', 'friends']) ->redirect();

Также можно указать параметры запроса, например язык (locale) и т. д.:

Первый месяц за 0 рублей
Хостинг для сайта, который должен работать стабильно
Перенесите проект или запустите новый сайт на Siteko.net и протестируйте сервис без предоплаты.
Перейти к хостингу
return Socialite::driver('vkontakte') ->setScopes(['email', 'friends']) ->with(['lang' => 'ru']) ->redirect();

Для просмотра дополнительных параметров см. документацию https://vk.com/dev/api_requests.

7. Пример сохранения данных пользователя в БД

Пример логики в обработчике callback, если вы хотите регистрировать/логинить пользователя в Laravel:

Route::get('/auth/vkontakte/callback', function () { $vkUser = Socialite::driver('vkontakte')->user(); // Проверяем, есть ли пользователь с таким же email в базе $existingUser = User::where('email', $vkUser->getEmail())->first(); if ($existingUser) { // Логиним его Auth::login($existingUser); } else { // Создаём нового пользователя $newUser = User::create([ 'name' => $vkUser->getName(), 'email' => $vkUser->getEmail(), // Можно хранить и VK ID 'vk_id' => $vkUser->getId(), // password нам не нужен, если мы не собираемся авторизовать по паролю // но Laravel требует поле, можно поставить случайный или nullable 'password' => Hash::make(Str::random(24)), ]); Auth::login($newUser); } return redirect('/home'); });

Подытожим

  1. Установить пакеты socialiteproviders/vkontakte и laravel/socialite.
  2. Зарегистрировать приложение в ВКонтакте, получить client_id, client_secret, прописать их в .env.
  3. Настроить services.php: 'vkontakte' => [ 'client_id' => env('VKONTAKTE_CLIENT_ID'), 'client_secret' => env('VKONTAKTE_CLIENT_SECRET'), 'redirect' => env('VKONTAKTE_REDIRECT_URI'), ],
  4. Добавить Event Listener для расширения Socialite провайдером VKontakte.
  5. Настроить маршруты redirect и callback.
  6. В контроллере/замыкании вызывать Socialite::driver('vkontakte')->redirect() и обрабатывать ответ Socialite::driver('vkontakte')->user() в колбэке.
  7. Сохранять и авторизовывать пользователя в Laravel по полученным данным.

На этом всё — после этих шагов у вас будет работать авторизация через ВКонтакте.

Первый месяц бесплатно

Хостинг Siteko.net для стабильного запуска сайта

Разместите проект на Siteko.net и проверьте скорость, панель управления и поддержку без стартовой оплаты.

  • 1 месяц бесплатно для новых клиентов сразу после выбора тарифа.
  • Быстрый старт для лендинга, блога или корпоративного сайта.
  • Поддержка рядом поможет с переносом и настройкой проекта.
Выбрать тариф