dotkernel/dot-auth-social

Authentication wrapper for social providers

1.1.2 2023-11-29 11:21 UTC

This package is auto-updated.

Last update: 2024-04-12 13:24:02 UTC


README

This package is a wrapper for thephpleague/oauth2-client social providers. It's goal is to authenticate users though facebook and return credentials and user details.

OSS Lifecycle PHP from Packagist (specify version)

GitHub issues GitHub forks GitHub stars GitHub license

Build Static codecov

SymfonyInsight

Installation

Run the following command in your project directory

$ composer require dotkernel/dot-auth-social

After installing, add the ConfigProvider class to your configuration aggregate.

Create a new file social-authentication.global.php in config/autoload with the following contents :

return [
    'social_authentication' => [
        'facebook' => [
            'client_id' => '',
            'client_secret' => '',
            'redirect_uri' => '',
            'graph_api_version' => '',
        ]
    ]
];

Note : Don't forger to put your credentials in the array.

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.