Connettere un'applicazione con i social network

Integrare in un sito web il login o la registrazione di un utente tramite Facebook, Twitter, Google, ect.., è una prassi molto diffusa.

Pubblicato da ,
Ultima modifica

Esistono diverse librerie open source che è possibile utilizzare per connettere la propria applicazione con i social network, in particolare

SocialConnect/Auth

è una libreria in PHP e l'installazione si effettua tramite Composer.

Il file composer.json di cui abbiamo bisogno per scaricare SocialConnect/Auth e tutte le altre dipendenze che ci occorrono per poter funzionare correttamente è il seguente

composer.json

{
    "require": {
        "socialconnect/auth": "^3.1",
        "socialconnect/http-client": "^1.0",
        "symfony/cache": "^4.4"
    }
}

salviamo questo file nella root del progetto e tramite il Prompt dei comandi posizioniamoci all'interno di essa tramite il comando

cd //percorso root

procediamo all'installazione usando il seguente comando

composer install

al termine del processo verrà creata una cartella vendor contenente tutti i file di cui abbiamo bisogno, tra cui il file autoload.php per il caricamento automatico delle classi.

Nella sezione degli esempi del progetto SocialConnect/Auth, il file config.php.dist contiene la lista di tutti i provider che è possibile utilizzare, prendiamo come esempio Facebook, e creiamo due file index.php e response.php

index.php

<?php
require_once __DIR__ . '/vendor/autoload.php';

$configureProviders=[
    'redirectUri'=>'http://localhost:8080/response.php',
    'provider'=>[
        'facebook'=>[
            'applicationId'=>'<appID Facebook>',
            'applicationSecret'=>'<appSecret Facebook>',
            'scope'=>['email'],
            'options'=>[
                'identity.fields'=>[
                    'email',
                    'picture.width(99999)'
                ],
            ],
        ],
    ],
];

$collectionFactory=new \SocialConnect\Auth\CollectionFactory;

$httpClient=new \SocialConnect\HttpClient\Curl();

$httpClient=new \SocialConnect\HttpClient\Cache(
    $httpClient,
    new \Symfony\Component\Cache\Psr16Cache(
        new \Symfony\Component\Cache\Adapter\PhpFilesAdapter(
            'socialconnect',
			0,
			__DIR__ . '/cache'
        )
    )
);

$httpStack=new \SocialConnect\Common\HttpStack(
    $httpClient,
    new \SocialConnect\HttpClient\RequestFactory(),
    new \SocialConnect\HttpClient\StreamFactory()
);

$service=new \SocialConnect\Auth\Service(
    $httpStack,
    new \SocialConnect\Provider\Session\Session(),
    $configureProviders,
    $collectionFactory
);

$providerName= 'facebook';

$provider=$service->getProvider($providerName);

// link per effettuare l'accesso a Facebook >>
echo $provider->makeAuthUrl();

redirectUri è il file di ritorno dopo aver effettuato il login che in questo esempio è response.php, applicationId e applicationSecret sono rispettivamente l'ID e il Secret dell'applicazione Facebook (è possibile creare un'applicazione Facebook al seguente link developers.facebook.com per ottenere ID e Secret), aprendo questo file nel browser verrà generato un link ( $provider->makeAuthUrl() ) per eseguire l'accesso a Facebook

response.php

<?php
require_once __DIR__ . '/vendor/autoload.php';

$configureProviders=[
    'redirectUri'=>'http://localhost:8080/responce.php',
    'provider'=>[
        'facebook'=>[
            'applicationId'=>'<appID Facebook>',
            'applicationSecret'=>'<appSecret Facebook>',
            'scope'=>['email'],
            'options'=>[
                'identity.fields'=>[
                    'email',
                    'picture.width(99999)'
                ],
            ],
        ],
    ],
];

$collectionFactory=new \SocialConnect\Auth\CollectionFactory;

$httpClient=new \SocialConnect\HttpClient\Curl();

$httpClient=new \SocialConnect\HttpClient\Cache(
    $httpClient,
    new \Symfony\Component\Cache\Psr16Cache(
        new \Symfony\Component\Cache\Adapter\PhpFilesAdapter(
            'socialconnect',
            0,
            __DIR__ . '/cache'
        )
    )
);

$httpStack=new \SocialConnect\Common\HttpStack(
    $httpClient,
    new \SocialConnect\HttpClient\RequestFactory(),
    new \SocialConnect\HttpClient\StreamFactory()
);

$service=new \SocialConnect\Auth\Service(
    $httpStack,
    new \SocialConnect\Provider\Session\Session(),
    $configureProviders,
    $collectionFactory
);

$providerName='facebook';

$provider=$service->getProvider($providerName);
$accessToken=$provider->getAccessTokenByRequestParameters($_GET);
echo "<pre>";
print_r($accessToken);
echo "<hr>";
$user=$provider->getIdentity($accessToken);
echo "<pre>";
print_r($user);

la variabile $user contiene le informazioni relative all'utente che ha effettuato il login tra cui l'indirizzo email e il link dell'immagine del profilo, in particolare è un oggetto simile a questo

SocialConnect\Common\Entity\User Object
(
    [id] => 'id account facebook'
    [firstname] => 
    [lastname] => 
    [email] => 'indirizzo email facebook'
    [emailVerified] => 1
    [birthday:protected] => 
    [username] => 
    [sex:protected] => 
    [fullname] => 
    [pictureURL] => 'link immagine profilo facebook'
)