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

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

  • 35

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() добавьте:

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);
    });
}
Начните с нами: 6 месяцев бесплатного хостинга!
Используйте промокод FREE6MONTH и раскройте потенциал своего сайта без финансовых вложений.

Для 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) и т. д.:

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

Для просмотра дополнительных параметров см. документацию 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 — это быстрый и простой хостинг для тех, кто ценит удобство и стабильность.

  • Без падений и нервов — наш uptime почти всегда 100%.
  • Гибкие тарифы — только нужные функции, ничего лишнего.
  • Скорость— сайты грузятся, как пуля!
  • Удобно — разобраться сможет даже новичок, всё под рукой.
  • Поддержка всегда рядом 24/7 поможем решить любой вопрос.

Заходите на Siteko.net и попробуйте нас бесплатно первый месяц! Мы делаем всё, чтобы ваш сайт работал без проблем.

Siteko.net — просто, быстро и надёжно!