Как настроить логин на сайт через контакт HWIOAuthBundle + Symfony4.3?

Для настройки логина на сайте через социальные сети с использованием контакта HWIOAuthBundle в Symfony 4.3, вам понадобится выполнить несколько шагов.

Шаг 1: Установка HWIOAuthBundle
Сначала установите HWIOAuthBundle с помощью Composer, выполнив следующую команду в директории вашего проекта:

composer require hwi/oauth-bundle php-http/guzzle6-adapter

Шаг 2: Настройка бандла
После установки бандла добавьте его в файл config/bundles.php вашего проекта:

return [
// ...
HwiBundleOAuthBundleHwiOAuthBundle::class => ['all' => true],
];

Далее, в файле config/packages/hwi_oauth.yaml добавьте настройки для контакта HWIOAuthBundle, например:

hwi_oauth:
firewall_names: [main]
resource_owners:
vkontakte:
type: "vkontakte"
client_id: "%env(VKONTAKTE_APP_ID)%"
client_secret: "%env(VKONTAKTE_APP_SECRET)%"
scope: "email"
paths:
email: "response.email"
redirect.http:
entity_inferred: true

Шаг 3: Настройка маршрутов и контроллера
Добавьте маршрут и контроллер для обработки авторизации через контакт в вашем приложении. Например, в файле config/routes.yaml:

hwi_oauth_redirect:
resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml"
prefix: /{firewall_name}

В контроллере, который будет обрабатывать авторизацию, добавьте следующий код:

use FOSUserBundleModelUserManagerInterface;
use HWIBundleOAuthBundleOAuthResourceOwnerInterface;

class SocialAuthController extends AbstractController
{
private $userManager;

public function __construct(UserManagerInterface $userManager)
{
$this->userManager = $userManager;
}

public function vkontakteConnectAction(ResourceOwnerInterface $vkontakte)
{
$user = $this->userManager->createUser();
$user->setUsername($vkontakte->getEmail()); // Используйте поле из response.paths.email
// Дополнительная логика для сохранения или обновления пользователя в вашей базе данных

// Вход или регистрация пользователя
$this->userManager->updateUser($user);
$this->get('security.token_storage')->setToken(new UsernamePasswordToken($user, null, 'main', $user->getRoles()));

// Перенаправление пользователя на главную страницу
return $this->redirectToRoute('homepage');
}
}

Шаг 4: Конфигурация безопасности
В конфигурационном файле для безопасности (например, config/packages/security.yaml) добавьте настройки для обработки авторизации в контроллере, созданном в предыдущем шаге. Например:

security:
firewalls:
...
main:
pattern: '^/'
anonymous: true
oauth:
resource_owners:
vkontakte: "/connect/vkontakte"
login_path: /connect/vkontakte
use_forward: true
failure_path: /login
default_target_path: /dashboard
oauth_user_provider:
service: FOSUserBundleSecurityUserProvider

Шаг 5: Конфигурация окружения
Наконец, настройте переменные окружения для вашего приложения, чтобы указать ID и секретный ключ контакта. В файле .env добавьте следующие строки с вашими значениями:

VKONTAKTE_APP_ID=your_app_id
VKONTAKTE_APP_SECRET=your_app_secret

После завершения всех этих шагов, вы должны иметь работающий механизм логина через контакт HWIOAuthBundle в вашем приложении Symfony 4.3.