I have created the package to login with social networks to a website using unified interface.
The package is available on Composer with the name gelembjuk/auth

How does it work.


composer require gelembjuk/auth

PHP Code:
$integrations = array(
'facebook' => array(
'api_key' => 'fake facebook api key',
'secret_key' => 'fake facebook secret key'
'twitter' => array(
'consumer_key' => 'fake twitter consumer key',
'consumer_secret' => 'fake twitter consumer secret'
'linkedin' => array(
'api_key' => 'fake linkedin api key',
'api_secret' => 'fake linkedin api secret'
'google' => array(
'application_name' => 'Your application name',
'client_id' => 'fake google api client id',
'client_secret' => 'fake google api client secret'
Start login process (it can be separate PHP file)

PHP Code:
$socialnetwork $_REQUEST['network']; 

// do some check if social network name is correct and allowed

// create social network login object. The second argument is array of API settings for a social network
$network Gelembjuk\Auth\AuthFactory::getSocialLoginObject($socialnetwork,$integrations[$socialnetwork]);

//IMPORTANT. his must be an absolute url of your "social login completion" script
$redirecturl 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['REQUEST_URI']).'/completelogin.php';

// get auth url and use redirect url to back to complete login page
$url $network->getLoginStartUrl($redirecturl);
// remember the state. it will be used when complete a social login
$_SESSION['socialloginsate_'.$socialnetwork] = $network->serialize();

// this is optional. you can include a network name in your redirect url and then extract
$_SESSION['socialloginnetwork'] = $socialnetwork;

// redirect to auth url. It will forward a user to a social network login page
header("Location: $url",true,301);
Complete login page. It is executed when a social network redirects a user back to your site to a $redirecturl

PHP Code:
// network name was saved in a session. get it from there
$socialnetwork $_SESSION['socialloginnetwork'];

// do everything in a try-catch
try {
// create social network login object. The second argument is array of API settings for a social network
$network Gelembjuk\Auth\AuthFactory::getSocialLoginObject($socialnetwork,$integrations[$socialnetwork]);
// read some imput parameters needed to complete auth by this social network
    // some social network will send back extra information like a code to exchange then for a token
$arguments = array();
    foreach (
$network->getFinalExtraInputs() as $key) {
$arguments[$key] = $_REQUEST[$key];
// restore to a state before redirect
// if fails then throws exception 
$profile $network->completeLogin($arguments);
// save user info to a session
$_SESSION['user'] = $profile;
// now user is loged in!
    //redirect user to home page
header("Location: index.php",true,301);
} catch (
Exception $e) {
"Somethign went wrong during the login process<br>";
"Error is: ".$e->getMessage();

Returned $profile is an array with keys: `userid`,'name','email','imageurl'