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'
)