Identification par Facebook
Les formulaires d'identification et d'inscription peuvent directement obtenir une adresse d'email à partir d'un compte Facebook.
Installez le SDK Facebook pour PHP puis configurez les paramètres $facebookid
et $facebooksecret
dans config.inc et mettez l'option $with_facebook
des blocs login
et register
à true
.
NOTE : Le code actuel interface la version 4 ou 5 du SDK qui est compatible avec PHP 5.4 et PHP 7.
Si vous êtes bloqué avec PHP 5.3, vous pouvez essayer de retirer une version antérieure du code des fonctions login
et register
et installer le SDK 3 dans un dossier appelé facebook à la racine du site.
SDK Facebook
Installez Composer.
Créez le fichier composer.json à la racine du site avec le contenu suivant :
{
"require": {
"facebook/graph-sdk": "^5.7"
}
}
Exécutez install
:
$ composer install
Tout le code est dans le répertoire vendor.
NOTE : Ajoutez les fichiers composer.json et composer.lock à Git. Ajoutez le répertoire vendor dans .gitignore.
À partir de votre compte Facebook, allez dans la partie facebook for developers. Ajoutez une application. Entrez le nom de domaine et l'adresse d'email du webmestre, e.g. sitename.net et webmaster@sitename.net. Créez un identifiant pour l'application.
Dans Paramètres, copiez l'Id et la clé secrète de l'application dans les paramètres $facebookid
et $facebooksecret
dans config.inc.
Ajoutez le produit Facebook Login. Dans les paramètres du produit, dans le champ URI de redirection OAuth valides, spécifiez les adresses des pages d'identification et d'inscription du site, dans toutes les langues supportées, en HTTP et en HTTPS si nécessaire. Téléchargez le logo de votre site en PNG avec un fond transparent.
IMPORTANT : Examinez l'application et rendez-la publique.
login.php et register.php
Éditez les fichiers login.php et register.php.
Mettez le paramètre $with_facebook
à true
pour activer l'interface avec Facebook.
Le code des blocs obtient l'adresse d'email de Facebook puis la valide comme si l'utilisateur l'avait saisie mais sans vérifier le mot de passe dans le formulaire d'identification.
Le formulaire d'inscription, si le paramètre $with_info
vaut true
, récupéra aussi le nom et le prénom de l'utilisateur du compte Facebook.
Code
Le code dans login.php montre comment le dialogue avec Facebook est géré.
Le code dans register.php est identique excepté pour les options $with_info
et $with_webiste
qui récupèrent le prénom et le nom de l'utilisateur ainsi que l'adresse de son site web.
require_once 'vendor/autoload.php';
global $facebookid, $facebooksecret;
$facebook=new \Facebook\Facebook(array('app_id' => $facebookid, 'app_secret' => $facebooksecret));
}
Si $with_facebook
vaut true
, charge le code du SDK and crée une instance de Facebook
avec les paramètres de configuration $facebookid
et $facebooksecret
.
case 'init':
if ($with_facebook) {
$helper = $facebook->getRedirectLoginHelper();
try {
$accessToken = $helper->getAccessToken();
if ($accessToken) {
$fields=array('email');
$r = $facebook->get('/me?fields=' . implode(',', $fields), $accessToken);
$user = $r->getGraphUser();
$login=$user['email'];
$action='facebook';
}
}
catch(\Facebook\Exceptions\FacebookResponseException $e) {
}
catch(\Facebook\Exceptions\FacebookSDKException $e) {
}
}
break;
Si $with_facebook
vaut true
, extrait le jeton d'accès à Facebook. Si le jeton a une valeur, l'utilisateur est connecté et le code peut récupérer le champ email
. Si tout se déroule bien, sans exceptions, met $action
à facebook
, une variante de l'action register
, afin de poursuivre l'analyse du formulaire normalement mais sans valider de mot de passe.
if ($with_facebook) {
global $base_url;
$url=$base_url . url('user', $lang);
$scope = array('email');
$helper = $facebook->getRedirectLoginHelper();
$facebook_login_url=$helper->getLoginUrl($url, $scope);
$connectbar=view('connect', $lang, compact('facebook_login_url'));
}
Le paramètre $connectbar
de la vue login
contient le code HTML du bouton d'appel de Facebook.
Si $with_facebook
vaut true
, demande à l'objet Facebook l'URL qui doit être associée au bouton et la passe à la vue connect
.
Commentaires