So authentifizieren Sie Benutzer mit Twitter OAuth

Ab dem 16. August unterstützt Twitter das grundlegende Authentifizierungsprotokoll für seine Plattform nicht mehr. Dies bedeutet, dass die einzige Möglichkeit zur Benutzerauthentifizierung über eine Twitter-Anwendung besteht. In diesem Tutorial zeige ich Ihnen, wie Sie Twitter als One-Click-Authentifizierungssystem verwenden, genau wie bei Facebook.


Schritt 1: Einrichten der Anwendung

Wir müssen zuerst eine neue Twitter-Anwendung einrichten.

  • Registrieren Sie eine neue App unter dev.twitter.com/apps/
  • Füllen Sie die Felder für Ihre Website entsprechend aus Browser im Anwendungstyp, und setze das Rückruf-URL zu so etwas http://localhost.com/twitter_login.php (http: // localhost / wird nicht akzeptiert, da es keinen Domainnamen hat).
  • Zum Schluss wählen Sie Lesen Schreiben. Füllen Sie das Captcha aus, klicken Sie auf "Registrierung registrieren" und akzeptieren Sie die Nutzungsbedingungen.

Nun sehen Sie den Bildschirm wie unten gezeigt.

Wir werden die verwenden Verbraucherschlüssel und Verbrauchergeheimnis Werte in Kürze.

Nachdem dies geschehen ist, laden wir eine Bibliothek herunter. Da wir mit PHP programmieren werden, scheint es am besten twitteroauth zu sein. Wenn Sie jedoch eine andere Sprache verwenden, finden Sie hier andere gute Bibliotheken.

Finden Sie das twitteroauth in der zip-Datei speichern und in den Ordner Ihrer Anwendung extrahieren.

Da wir Twitter zur Authentifizierung von Benutzern verwenden, benötigen wir schließlich eine Datenbanktabelle, um diese Benutzer zu speichern. Hier ist ein kurzes Beispiel dafür, was wir tun werden.

 CREATE TABLE 'users' ('id' int (10) ohne Vorzeichen NOT NULL AUTO_INCREMENT, 'oauth_provider' varchar (10), 'oauth_uid' - Text, 'oauth_token' - Text, 'oauth_secret' - Text, 'Benutzername', 'PRIMARY KEY' (' id ')) ENGINE = MyISAM DEFAULT CHARSET = latin1;

Beachten Sie die oauth_token und oauth_secret Felder. Twitter's OAuth erfordert Zeichen und ein token_secret Werte, um die Benutzer zu authentifizieren, deshalb schließen wir diese ein. Damit sind wir mit dem Setup fertig!


Schritt 2: Benutzer registrieren

In diesem Schritt werden wir drei Dinge tun:

  • Autorisierung von Twitter beantragen.
  • Registrieren oder, wenn der Benutzer bereits registriert ist, den Benutzer anmelden.
  • Einrichten der Daten in eine Sitzung.

Genehmigung beantragen

Der OAuth-Workflow beginnt mit der Generierung einer URL für die Anforderung. Der Benutzer wird zu dieser URL umgeleitet und zur Autorisierung aufgefordert. Nach der Erteilung leitet die Anwendung mit zwei Token in den URL-Parametern, die für die Authentifizierung erforderlich sind, an unseren Server zurück.

Beginnen wir mit dem Einbinden der Bibliothek und dem Starten eines Session-Handlers.

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

Anschließend erstellen wir eine neue TwitterOAuth-Instanz, die den Verbraucherschlüssel und das Verbraucherschutzgeheimnis enthält, das Twitter uns bei der Erstellung der Anwendung gegeben hat. Anschließend fordern wir die Authentifizierungs-Token an, speichern sie in der Sitzung und leiten den Benutzer zur Autorisierung an Twitter weiter.

 // Die TwitterOAuth-Instanz $ twitteroauth = new TwitterOAuth ('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET'); // Anfordern von Authentifizierungs-Token ist der Parameter die URL, zu der wir weitergeleitet werden zu $ ​​request_token = $ twitteroauth-> getRequestToken ('http://localhost.com/twitter_oauth.php'); // Speichern in der Sitzung $ _SESSION ['oauth_token'] = $ request_token ['oauth_token']; $ _SESSION ['oauth_token_secret'] = $ request_token ['oauth_token_secret']; // Wenn alles gut geht… if ($ twitteroauth-> http_code == 200) // Lassen Sie uns die URL generieren und $ url = $ twitteroauth-> getAuthorizeURL ($ request_token ['oauth_token']) umleiten. header ('Location:'. $ url);  else // Es ist keine gute Idee, das Skript zu beenden, aber wir müssen wissen, wann ein Fehler vorliegt. sterben ('Etwas ist passiert.'); 

Speichern Sie es als twitter_login.php, gehe zu http://localhost.com/twitter_login.php oder wie auch immer Ihr lokaler Hostname lautet. Wenn alles korrekt lief, sollten Sie auf twitter.com umgeleitet werden und etwas ähnliches sehen.

Klicken Sie auf Erlauben, und Sie werden zu weitergeleitet http://localhost.com/twitter_oauth.php -- da wir diese URL als Parameter in der getRequestToken Aussage. Wir haben diese Datei nicht erstellt, daher sollte eine Fehlermeldung ausgegeben werden. Erstellen Sie diese Datei, schließen Sie die Bibliothek ein und starten Sie eine Sitzung, genau wie in der ersten Datei.

Danach brauchen wir drei Dinge:

  • Authentifizierungsprüfung in den URL-Abfragedaten
  • Auth-Token aus der Sitzung
  • Auth geheim von der Sitzung

In diesem Skript sollten Sie als Erstes diese Daten überprüfen und umleiten, wenn eine dieser Variablen leer ist.

 if (! empty ($ _ GET ['oauth_verifier']) &&! empty ($ _ SESSION ['oauth_token']) &&! empty ($ _ SESSION ['oauth_token_secret']))) // Wir haben alles was wir brauchen // Etwas fehlt, gehe zurück zur Kopfzeile von Quadrat 1 ('Location: twitter_login.php'); 

Wenn nun alles festgelegt ist, erstellen wir innerhalb der Bedingung die TwitterOAuth-Instanz, aber mit den Token haben wir gerade den dritten und vierten Parameter erhalten; Danach erhalten wir das Zugriffstoken, das ein Array ist. Dieses Token speichern wir in der Datenbank. Zum Schluss machen wir einen kurzen Test, um zu sehen, ob alles klappt.

 // TwitterOAuth-Instanz mit zwei neuen Parametern in twitter_login.php $ twitteroauth = new TwitterOAuth ('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET', $ _SESSION ['oauth_token'], $ _SESSION ['oauth_token_secret'); // Fordern wir das Zugriffstoken an $ access_token = $ twitteroauth-> getAccessToken ($ _ GET ['oauth_verifier']); // Speichern Sie es in einer Sitzung var $ _SESSION ['access_token'] = $ access_token; // Lass uns die Informationen des Benutzers erhalten $ user_info = $ twitteroauth-> get ('account / verify_credentials'); // Benutzerinfo drucken print_r ($ user_info);

Wenn nichts schief geht, das print_r sollte die Daten des Benutzers anzeigen. Sie können die ID des Benutzers mit erhalten $ user_info-> id, seinen oder ihren Benutzernamen mit $ user_info-> bildschirmname; Es gibt auch eine Menge anderer Informationen.

Es ist sehr wichtig zu wissen, dass die oauth_verifier wurde bisher noch nicht verwendet. Wenn Sie die Informationen des Benutzers richtig sehen und die Seite dann neu laden, gibt das Skript einen Fehler aus, da diese Variable verwendet wurde. Geh einfach zurück zu twitter_login.php und es wird automatisch ein neues frisches Token generiert.

Benutzer registrieren

Nun, da wir die Benutzerinformationen haben, können wir sie jetzt registrieren, aber zuerst müssen wir überprüfen, ob sie in unserer Datenbank vorhanden sind. Beginnen wir mit der Verbindung zur Datenbank. Fügen Sie diese Zeilen am Anfang des Skripts ein.

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

Ändern Sie die Datenbankinformationen nach Bedarf. Direkt unterhalb des Abrufs der Benutzerinformationen müssen wir in unserer Datenbank nach dem Benutzer suchen. Wenn er oder sie nicht da ist, geben wir die Informationen ein. Wenn der Benutzer registriert wurde, müssen wir die Token aktualisieren, da Twitter neue generiert hat und die, die wir in der Datenbank haben, jetzt unbrauchbar sind. Schließlich setzen wir die Informationen des Benutzers auf die Sitzungsvars und leiten zu um twitter_update.php.

 if (isset ($ user_info-> error)) // Irgendetwas stimmt nicht, gehe zurück zur Kopfzeile von Quadrat 1 ('Location: twitter_login.php');  else // Finden wir den Benutzer anhand seiner ID $ query = mysql_query ("SELECT * FROM-Benutzer WHERE oauth_provider = 'twitter' AND oauth_uid =". $ user_info-> id); $ result = mysql_fetch_array ($ query); // Wenn nicht, fügen wir ihn der Datenbank hinzu, wenn (empty ($ result)) $ query = mysql_query ("INSERT INTO-Benutzer (oauth_provider, oauth_uid, Benutzername, 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 * FROM Benutzer WHERE id =". mysql_insert_id ()); $ result = mysql_fetch_array ($ query);  else // Aktualisieren Sie die Token $ query = mysql_query ("UPDATE-Benutzer SET oauth_token = '$ access_token [' oauth_token ']", oauth_secret =' $ access_token ['oauth_token_secret'] ' AND oauth_uid = $ user_info-> id ");  $ _SESSION ['id'] = $ result ['id']; $ _SESSION ['username'] = $ result ['username']; $ _SESSION ['oauth_uid'] = $ result ['oauth_uid']; $ _SESSION ['oauth_provider'] = $ result ['oauth_provider']; $ _SESSION ['oauth_token'] = $ result ['oauth_token']; $ _SESSION ['oauth_secret'] = $ result ['oauth_secret']; header ('Location: twitter_update.php'); 

Beachten Sie, dass diese Abfragen nicht überprüft werden. Wenn Sie sie so lassen, wie sie sind, verlassen Sie Ihre Datenbank anfällig. Schließlich sollten wir unterhalb der Datenbankverbindung eine Prüfung setzen, um zu überprüfen, ob der Benutzer angemeldet ist.

 if (! empty ($ _ SESSION ['username'])) // Benutzer ist angemeldet, Header umleiten ('Location: twitter_update.php'); 

Sie können den Benutzer jetzt mit seinem Benutzernamen begrüßen.

 

Hallo

Kommen wir auf die lustige Seite: Aktualisieren, Verfolgen und Lesen.


Schritt 3: Status lesen

Es stehen mehr als zwanzig Kategorien von Ressourcen zur Verfügung: Zeitleiste, Tweets, Benutzer, Trends, Listen, Direktnachrichten usw. Jede hat eine Reihe von Methoden, die Sie in der offiziellen Dokumentation überprüfen können. Wir werden auf die Grundlagen eingehen, da auf die meisten dieser Funktionen auf ähnliche Weise zugegriffen wird.

Genau wie die beiden anderen Skripts müssen wir die TwitterOAuth-Instanz einschließlich der Variablen in der Sitzung erstellen.

 if (! leer ($ _ SESSION ["Benutzername"])) $ twitteroauth = new TwitterOAuth ('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET', $ _SESSION ['oauth_token'], $ _SESSION ['oauth_secret']); 

Wir beginnen mit der Zeitleiste des Benutzers. Die Referenz sagt uns, dass der Pfad ist statuses / home_timeline; Ignoriere das Ausführung und Format, Die Bibliothek kümmert sich darum.

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

Das wird dir die Zeitleiste bringen. Sie können jeden Artikel mit einem für jeden Schleife. Die Referenz gibt jedoch einige optionale Parameter wie an Anzahl, was begrenzt, wie viele Tweets abgerufen werden. Eigentlich, erhalten's zweiter Parameter ist ein Array aller benötigten Optionen. Wenn Sie also die letzten vierzig Tweets abrufen möchten, finden Sie hier den Code:

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

Sie können auch die Zeitleiste einer anderen Person sehen, solange sie nicht geschützt ist. statuses / user_timeline erfordert entweder eine Benutzer-ID oder einen Anzeigenamen. Wenn Sie die Zeitleiste von @nettuts überprüfen möchten, müssen Sie das folgende Snippet verwenden:

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

Wie Sie sehen können, ist das Lesen von Zeitleisten nach der Authentifizierung ein Kinderspiel.


Schritt 4: Freundschaften

Mit Freundschaften können Sie überprüfen, ob ein Benutzer einem anderen folgt, oder anderen Benutzern folgen oder deren Aufhebung folgen. Dieses Snippet prüft, ob Sie mir folgen, und erstellt, falls nicht, die Folge.

Aber zuerst das überprüfen Freundschaften / existiert und Freundschaften / schaffen Referenz. Beachte etwas? Freundschaften / schaffen Methode ist POST. Zum Glück enthält die Bibliothek eine Post() Funktion, die genauso funktioniert wie die erhalten() Funktion; Der Hauptunterschied ist das erhalten() ist zum lesen und Post() dient zum Anlegen, Löschen oder Aktualisieren.

Sowieso, Freundschaften / existiert erfordert zwei Parameter: user_a und user_b, und Freundschaften / schaffen benötigt auch nur einen Künstlername oder Benutzeridentifikation.

 $ follow_faelazo = $ twitteroauth-> get ('Freundschaften / existiert', Array ('user_a' => $ _SESSION ['username'], 'user_b' => 'faelazo')); if (! $ follow_faelazo) echo 'Sie folgen @faelazo NICHT!'; $ twitteroauth-> post ('friendships / create'), array ('screen_name' => 'faelazo')); 

Sie können einen Benutzer mit im Wesentlichen demselben Code auflösen, der eine Folge erzeugt, ersetzen Sie ihn einfach erstellen mit zerstören:

 $ follow_faelazo = $ twitteroauth-> get ('Freundschaften / existiert', Array ('user_a' => $ _SESSION ['username'], 'user_b' => 'faelazo')); if ($ follow_faelazo) echo 'Du folgst @faelazo! Fahren Sie fort, um nicht mehr zu folgen… '; $ twitteroauth-> post ('friendships / destroy'), array ('screen_name' => 'faelazo')); 

Schritt 5: Aktualisierungen veröffentlichen

Dies ist wahrscheinlich der interessanteste Abschnitt, da es sich um den Kern von Twitter handelt: Die Veröffentlichung eines Updates ist, wie Sie sich vielleicht gedacht haben, ziemlich unkompliziert. Der Weg ist Status / Update, Die Methode ist POST (da wir nicht lesen), und das einzige erforderliche Argument ist Status.

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

Gehen Sie jetzt zu Ihrer Twitter-Profilseite und Sie sehen Ihren Tweet.

Lassen Sie uns das Update von @Nettuts über den HTML 5-Wettbewerb erneut mitteilen. Die Status-ID lautet 19706871538 und die Referenz sagt uns, dass der Pfad ist Status / Retweet /: ID, bei dem die :Ich würde Teil ist die Status-ID, die wir zurückerwecken werden. Die Methode ist POST und erfordert keine zusätzlichen Parameter.

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

Um einen Tweet zu löschen, müssen Sie die Status-ID übergeben, die Sie im ersten Parameter zerstören möchten, genau wie beim Retweeting. Wenn die ID des Tweets 123456789 lautet, lautet der zu zerstörende Code.

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

Natürlich kann dieser Code nur Tweets löschen, die vom authentifizierten Benutzer erstellt wurden.


Schlussfolgerungen

Die API von Twitter ist leicht zu verstehen. Es ist weitaus dokumentierter als Facebook (obwohl Facebook eine eigene Bibliothek anbietet). Leider ist die Authentifizierung je nach Sitzungsdaten nicht so reibungslos, wie wir hoffen.

Bemerkenswert ist, dass Sie nach der Autorisierung eines Twitter-Benutzers (vorausgesetzt, die App verfügt über Lese- und Schreibberechtigungen), eine umfassende Kontrolle über dieses Konto haben. Wenn Sie im Auftrag des Benutzers ohne seine Erlaubnis etwas ändern, wird dies zu Problemen führen. Verwenden Sie es mit Vorsicht!

Die bei Twitter kommenden API-Änderungen verweigern die Basisauthentifizierung. Twitter konzentriert sich darauf, die zahllosen Betrügereien zu beenden, die Benutzer dazu verleiten, ihre Anmeldeinformationen aufzugeben. OAuth ist die Lösung; Wenn Sie das Facebook Connect-Tutorial durchgearbeitet haben, können Sie jetzt Ihren Benutzern der Website oder App ein schnelles Login ohne Anmeldeinformationen bereitstellen, indem Sie die beiden am häufigsten verwendeten sozialen Netzwerke auswählen. Wie cool ist das?