Usage

In this example we will create a new controller, but you can use an existing one too.

<?php

namespace Frontend\User\Controller;

use Dot\Controller\AbstractActionController;
use Dot\AuthSocial\Service\AuthenticationServiceInterface;
use Laminas\Diactoros\Response\RedirectResponse;
use Psr\Http\Message\ResponseInterface;

class FacebookController extends AbstractActionController
{
    private AuthenticationServiceInterface $service;

    public function __construct(AuthenticationServiceInterface $service)
    {
        $this->service = $service;
    }

    public function authAction(): ResponseInterface
    {
        $code = $this->request->getQueryParams()['code'] ?? false;
        if (! $code) {
            return new RedirectResponse($this->service->getAuthorizationUrl());
        }

        $result = $this->service->authenticate($code);
        if (! $result->isValid()) {
            // invalid authentication, check $result->getMessages() for errors.
        } else {
            // valid authentication, use $result->getArrayCopy() to get the user details
        }
    }
}

Create a factory for the controller:

<?php

use Dot\AuthSocial\Service\FacebookService;
use Psr\Container\ContainerInterface;

class FacebookControllerFactory
{
    public function __invoke(ContainerInterface $container): FacebookController
    {
        return new FacebookController($container->get(FacebookService::class));
    }
}

Make sure to register your controller with the factory in ConfigProvider.