20

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.

Allez à la racine du site web et tapez la commande suivante :

$ composer require facebook/graph-sdk

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.

    if ($with_facebook) {
        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.

    switch($action) {
        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

    $connectbar=false;
    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

Pour ajouter un commentaire, cliquez ici.