Comment authentifier les utilisateurs avec Twitter OAuth

À compter du 16 août, Twitter ne prendra plus en charge le protocole d’authentification de base pour sa plate-forme. Cela signifie que le seul moyen d'authentifier les utilisateurs consiste à utiliser une application Twitter. Dans ce tutoriel, je vais vous montrer comment utiliser Twitter comme système d'authentification en un clic, comme nous l'avons fait avec Facebook..


Étape 1: Configuration de l'application

Nous allons d'abord avoir besoin de configurer une nouvelle application Twitter.

  • Enregistrez une nouvelle application sur dev.twitter.com/apps/
  • Remplissez les champs de votre site en conséquence, assurez-vous simplement de sélectionner Navigateur dans Type d'application, et mettre le URL de rappel à quelque chose comme http://localhost.com/twitter_login.php (http: // localhost / ne sera pas accepté car il n'a pas de nom de domaine).
  • Enfin, sélectionnez Lire écrire. Remplissez le captcha, cliquez sur "Enregistrer l'application" et acceptez les conditions d'utilisation..

Maintenant, vous verrez l'écran comme indiqué ci-dessous.

Nous allons utiliser le La clé du consommateur et Secret du consommateur valeurs sous peu.

Maintenant que cela est fait, téléchargeons une bibliothèque. Comme nous allons coder avec PHP, il semble que le meilleur d'entre eux soit twitteroauth; mais si vous utilisez une autre langue, vous trouverez d'autres bonnes bibliothèques ici.

Trouvez le twitteroauth répertoire dans le fichier zip et extrayez-le dans le dossier de votre application.

Enfin, comme nous utilisons Twitter pour authentifier les utilisateurs, nous avons besoin d’une table de base de données pour stocker ces utilisateurs. Voici un exemple rapide de ce que nous allons faire.

 CREATE TABLE 'users' ('id' int (10) non signé NOT NULL AUTO_INCREMENT, 'oauth_provider', varchar (10), texte 'oauth_uid', texte 'oauth_secret', texte 'nomutilisateur', texte PRIMARY KEY (' id ')) ENGINE = MyISAM DEFAULT CHARSET = latin1;

Remarquez le oauth_token et oauth_secret des champs. OAuth de Twitter nécessite jeton et un token_secret des valeurs pour authentifier les utilisateurs, c'est pourquoi nous les incluons. Avec cela, nous avons terminé avec la configuration!


Étape 2: Enregistrement des utilisateurs

Dans cette étape, nous ferons trois choses:

  • Demander l'autorisation de Twitter.
  • Enregistrement ou, si l'utilisateur est déjà enregistré, connexion à l'utilisateur.
  • Définir les données dans une session.

Demander une autorisation

Le flux de travail OAuth commence par générer une URL pour la demande. l'utilisateur est redirigé vers cette URL et une autorisation lui est demandée. Après l’accorder, l’application redirige vers notre serveur avec deux jetons dans les paramètres d’URL, nécessaires à l’authentification..

Commençons par inclure la bibliothèque et démarrer un gestionnaire de session.

 require ("twitteroauth / twitteroauth.php"); session_start ();

Après cela, créons une nouvelle instance de TwitterOAuth, en lui donnant la clé de consommateur et le secret de consommateur que Twitter nous a donnés lors de la création de l'application. Ensuite, nous demanderons les jetons d'authentification, les enregistrerons dans la session et redirigerons l'utilisateur vers Twitter pour autorisation..

 // L'instance TwitterOAuth $ twitteroauth = new TwitterOAuth ('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET'); // Demande de jetons d'authentification, le paramètre correspond à l'URL vers laquelle nous allons être redirigé $ request_token = $ twitteroauth-> getRequestToken ('http://localhost.com/twitter_oauth.php'); // Enregistrement dans la session $ _SESSION ['oauth_token'] = $ request_token ['oauth_token']; $ _SESSION ['oauth_token_secret'] = $ request_token ['oauth_token_secret']; // Si tout se passe bien… if ($ twitteroauth-> http_code == 200) // Générons l'URL et redirigeons $ url = $ twitteroauth-> getAuthorizeURL ($ request_token ['oauth_token']); en-tête ('Lieu:'. $ url);  else // C'est une mauvaise idée de tuer le script, mais nous devons savoir s'il y a une erreur. mourir ('Quelque chose de faux est arrivé.'); 

Enregistrez-le sous twitter_login.php, aller à http://localhost.com/twitter_login.php ou quel que soit votre nom d'hôte local. Si tout se passe correctement, vous devriez être redirigé vers twitter.com, et vous devriez voir quelque chose comme ça..

Cliquez sur Autoriser et vous serez redirigé vers http://localhost.com/twitter_oauth.php -- depuis que nous avons défini cette URL comme paramètre dans le getRequestToken déclaration. Nous n'avons pas créé ce fichier, il devrait donc générer une erreur. Créez ce fichier, puis incluez la bibliothèque et démarrez une session, comme dans le premier fichier..

Après cela, nous aurons besoin de trois choses:

  • Vérificateur d'authentification dans les données de requête d'URL
  • Jeton d'authentification de la session
  • Secret d'authentification de la session

Donc, la première chose à faire dans ce script est de valider ces données et de les rediriger si l’une de ces variables est vide.

 if (! empty ($ _GET ['oauth_verifier'])) &&! vide ($ _SESSION ['oauth_token']) &&! vide ($ _SESSION ['oauth_token_secret']))) // Nous avons tout ce dont nous avons besoin else // Quelque chose manque, retournez à l'en-tête 1 en-tête ('Location: twitter_login.php'); 

Maintenant, si tout est défini, à l'intérieur du conditionnel, nous allons créer l'instance TwitterOAuth, mais avec les jetons que nous venons de recevoir comme troisième et quatrième paramètres; après cela, nous aurons le jeton d'accès, qui est un tableau. Ce jeton est celui que nous allons enregistrer dans la base de données. Enfin, nous ferons un test rapide pour voir si tout se passe bien.

 // instance TwitterOAuth, avec deux nouveaux paramètres que nous avons dans twitter_login.php $ twitteroauth = new TwitterOAuth ('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET', $ _SESSION ['oauth_token'], $ _SESSION ['oauth_token_secret']); // Demandons le jeton d'accès $ access_token = $ twitteroauth-> getAccessToken ($ _GET ['oauth_verifier']); // Sauvegarde-le dans une session var $ _SESSION ['access_token'] = $ access_token; // Récupérons les informations de l'utilisateur $ user_info = $ twitteroauth-> get ('account / verify_credentials'); // Imprimer les informations de l'utilisateur print_r ($ user_info);

Si rien ne va pas, le print_r devrait montrer les données de l'utilisateur. Vous pouvez obtenir l'identifiant de l'utilisateur avec $ user_info-> id, son identifiant avec $ user_info-> nom_écran; il y a un tas d'autres informations là aussi.

Il est très important de réaliser que le oauth_verifier n'a pas été utilisé avant cela. Si vous voyez correctement les informations de l'utilisateur, puis rechargez la page, le script génère une erreur car cette variable a été utilisée. Il suffit de retourner à twitter_login.php et il générera automatiquement un autre jeton frais.

Enregistrement d'utilisateurs

Maintenant que nous avons les informations de l'utilisateur, nous pouvons les enregistrer et les enregistrer, mais nous devons d'abord vérifier si elles existent dans notre base de données. Commençons par nous connecter à la base de données. Ajoutez ces lignes au début du script.

 mysql_connect ('localhost', 'YOUR_USERNAME', 'YOUR_PASSWORD'); mysql_select_db ('YOUR_DATABASE');

Modifiez les informations de la base de données si nécessaire. Maintenant, juste en dessous de l'endroit où nous récupérons les informations de l'utilisateur, nous devrons rechercher l'utilisateur dans notre base de données. S'il n'est pas là, nous entrerons les informations. Si l'utilisateur a été enregistré, nous devons mettre à jour les jetons, car Twitter en a généré de nouveaux et ceux que nous avons dans la base de données sont maintenant inutilisables. Enfin, nous définissons les informations de l'utilisateur sur les vars de session et nous redirigeons vers twitter_update.php.

 if (isset ($ user_info-> error)) // Quelque chose ne va pas, retournez à l'en-tête 1 ('Location: twitter_login.php');  else // Trouvons l'utilisateur par son ID $ query = mysql_query ("SELECT * FROM utilisateurs WHERE oauth_provider = 'twitter' AND oauth_uid =". $ user_info-> id); $ result = mysql_fetch_array ($ query); // Si non, ajoutons-le à la base de données if (empty ($ result)) $ query = mysql_query ("INSERT INTO users (oauth_provider, oauth_uid, username, oauth_token, oauth_secret) VALUES ('twitter', $ user_info- > id, '$ user_info-> screen_name', '$ access_token [' oauth_token ']', '$ access_token [' oauth_token_secret ']') "); $ query = mysql_query ("SELECT * DES utilisateurs WHERE id =". mysql_insert_id ()); $ result = mysql_fetch_array ($ query);  else // Mettre à jour les jetons $ query = mysql_query ("UPDATE utilisateurs SET oauth_token = '$ access_token [' oauth_token '], oauth_secret =' $ access_token ['oauth_token_secret'], 'WHERE AND oauth_uid = $ user_info-> id ");  $ _SESSION ['id'] = $ result ['id']; $ _SESSION ["nom d'utilisateur"] = $ result ["nom d'utilisateur"]; $ _SESSION ['oauth_uid'] = $ result ['oauth_uid']; $ _SESSION ['oauth_provider'] = $ result ['oauth_provider']; $ _SESSION ['oauth_token'] = $ result ['oauth_token']; $ _SESSION ['oauth_secret'] = $ result ['oauth_secret']; en-tête ('Location: twitter_update.php'); 

Notez que ces requêtes ne sont pas validées. si vous les laissez tels quels, vous laissez votre base de données vulnérable. Enfin, sous la connexion à la base de données, nous devrions définir une vérification pour vérifier que l'utilisateur est connecté..

 if (! empty ($ _SESSION ['nom d'utilisateur']])) // l'utilisateur est connecté, en-tête de redirection ('Location: twitter_update.php'); 

Vous pouvez maintenant saluer l'utilisateur par son nom d'utilisateur.

 

Bonjour

Passons au côté amusant: mise à jour, suivi et lecture.


Étape 3: Lecture des statuts

Il existe plus de vingt catégories de ressources disponibles: chronologie, tweets, utilisateurs, tendances, listes, messages directs, etc. Chacune de ces méthodes est riche en méthodes, vous pouvez toutes les vérifier dans la documentation officielle. Nous allons aborder les bases, car la plupart de ces fonctionnalités sont accessibles de la même manière..

Comme pour les deux autres scripts, nous devrons créer l'instance TwitterOAuth, y compris les variables de la session..

 if (! empty ($ _SESSION ['nom_utilisateur'])) $ twitteroauth = nouveau TwitterOAuth ('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET', $ _SESSION ['oauth_token'], $ _SESSION ['oauth_secret']); 

Nous allons commencer par la chronologie de l'utilisateur. La référence nous dit que le chemin est statuts / home_timeline; ignore le version et format, la bibliothèque s'en occupera.

 $ home_timeline = $ twitteroauth-> get ('statuses / home_timeline'); print_r ($ home_timeline);

Cela vous donnera la chronologie. Vous pouvez récupérer chaque article avec un pour chaque boucle. Cependant, la référence spécifie certains paramètres optionnels tels que compter, ce qui limite le nombre de tweets à récupérer. En réalité, obtenirLe second paramètre de est un tableau de toutes les options nécessaires. Si vous voulez récupérer les quarante derniers tweets, voici le code:

 $ home_timeline = $ twitteroauth-> get ('statuses / home_timeline', array ('count' => 40));

En outre, vous pouvez voir le calendrier de quelqu'un d'autre, tant qu'il n'est pas protégé. statuts / user_timeline nécessite un identifiant d'utilisateur ou un nom d'écran. Si vous voulez vérifier la chronologie de @nettuts, vous devez utiliser l'extrait de code suivant:

 $ nettuts_timeline = $ twitteroauth-> get ('statuses / user_timeline', array ('screen_name' => 'nettuts'));

Comme vous pouvez le constater, après l'authentification, la lecture des délais est un jeu d'enfant..


Étape 4: amitiés

Avec les amitiés, vous pouvez vérifier si un utilisateur en suit un autre, ainsi que suivre ou ne plus suivre d’autres utilisateurs. Cet extrait vérifiera si vous me suivez et créera le suivi sinon.

Mais d'abord, vérifiez la amitiés / existe et amitiés / créer référence. Remarquez quelque chose? amitiés / créer méthode est POST. Heureusement, la bibliothèque comprend un poster() fonction, qui fonctionne comme le obtenir() une fonction; la principale différence est que obtenir() est pour la lecture et poster() est pour créer, supprimer ou mettre à jour.

Quoi qu'il en soit, amitiés / existe nécessite deux paramètres: utilisateur_a et utilisateur_b, et amitiés / créer nécessite un seul, soit Nom de l'écran ou identifiant d'utilisateur.

 $ follow_faelazo = $ twitteroauth-> get ('amitiés / existe', array ('user_a' => $ _SESSION ['nom_utilisateur'], 'user_b' => 'faelazo')); if (! $ follow_faelazo) echo 'Vous ne suivez PAS @faelazo!'; $ twitteroauth-> post ('friendships / create', array ('screen_name' => 'faelazo')); 

Vous pouvez ne plus suivre un utilisateur avec essentiellement le même code qui crée un suivi, il suffit de remplacer créer avec détruire:

 $ follow_faelazo = $ twitteroauth-> get ('amitiés / existe', array ('user_a' => $ _SESSION ['nom_utilisateur'], 'user_b' => 'faelazo')); if ($ follow_faelazo) echo 'Vous suivez @faelazo! Continuer à ne plus suivre… '; $ twitteroauth-> post ('friendships / destroy', array ('screen_name' => 'faelazo')); 

Étape 5: Publication des mises à jour

C’est probablement la section la plus intéressante, car c’est le cœur de Twitter: publier une mise à jour, comme vous l’auriez imaginé, est assez simple. Le chemin est statuts / mise à jour, la méthode est POST (puisque nous ne lisons pas), et le seul argument requis est statut.

 $ twitteroauth-> post ('statuses / update', array ('status' => 'Hello Nettuts +'));

Maintenant, allez sur votre page de profil Twitter et vous verrez votre tweet.

Retweetons la mise à jour de @Nettuts pour annoncer le concours HTML 5; l'identifiant de statut est 19706871538 et la référence nous dit que le chemin est statuts / retweet /: id, où le : id la partie est l'identifiant de statut que nous allons retweeter. La méthode est POST et ne nécessite pas de paramètres supplémentaires.

 $ twitteroauth-> post ('statuses / retweet / 19706871538');

Pour supprimer un tweet, vous devez transmettre l'identifiant du statut que vous allez détruire dans le premier paramètre, comme pour le retweet. Si l'identifiant du tweet est 123456789, le code à détruire sera.

 $ twitteroauth-> post ('statuses / destroy / 123456789');

Bien entendu, ce code ne peut supprimer que les tweets créés par l'utilisateur authentifié.


Conclusions

L'API de Twitter est assez facile à comprendre. c'est beaucoup plus documenté que même sur Facebook (même si Facebook offre une bibliothèque interne). Malheureusement, l'authentification n'est pas aussi fluide qu'on pourrait l'espérer, en fonction des données de session..

Une chose à noter est qu'une fois qu'un utilisateur de Twitter a été autorisé (en supposant que l'application dispose d'autorisations de lecture et d'écriture), vous avez un contrôle important sur ce compte. Si vous modifiez quelque chose au nom de l'utilisateur sans son autorisation, vous créerez des problèmes. Utilisez-le avec prudence!

Les modifications de l'API arrivant sur Twitter nieront l'authentification de base. Twitter cherche à mettre fin aux innombrables escroqueries qui poussent les utilisateurs à renoncer à leurs identifiants de connexion. OAuth est la solution. et, si vous avez suivi le didacticiel Facebook Connect, vous pouvez désormais fournir à votre site Web ou à vos applications une connexion rapide sans informations d'identification, en choisissant parmi les deux réseaux sociaux les plus utilisés. À quel point cela est cool?