Så här autentiserar du användare med Twitter OAuth

Från och med 16 augusti kommer Twitter inte längre att stödja det grundläggande autentiseringsprotokollet för sin plattform. Det betyder att det enda sättet att verifiera användare kommer att vara via en Twitter-applikation. I den här handledningen visar jag dig hur du använder Twitter som ett klickautentiseringssystem, precis som vi gjorde med Facebook.


Steg 1: Ställa in programmet

Vi måste först skapa en ny Twitter-applikation.

  • Registrera en ny app på dev.twitter.com/apps/
  • Fyll i fälten för din webbplats följaktligen, var noga med att välja Webbläsare i ansökningstyp, och ställa in Återuppringningsadress till något liknande http://localhost.com/twitter_login.php (http: // localhost / kommer inte att accepteras eftersom det inte har ett domännamn).
  • Slutligen, välj Läsa skriva. Fyll i captcha, klicka på "Registrera Application," och acceptera användarvillkoren.

Nu ser du skärmen som visas nedan.

Vi kommer att använda Konsumentnyckel och Konsumenthemlighet värden inom kort.

Nu när det här är gjort, låt oss ladda ner ett bibliotek. Som vi kommer att koda med PHP, verkar det som det bästa är twitteroauth; men om du använder ett annat språk hittar du andra bra bibliotek här.

Hitta twitteroauth katalog i zip-filen och extrahera den till programmets mapp.

Slutligen, eftersom vi använder Twitter för att verifiera användare, behöver vi en databastabell för att lagra dessa användare. Här är ett snabbt exempel på vad vi ska göra.

 CREATE TABLE "users" ("id" int (10) unsigned INTE NULL AUTO_INCREMENT, "oauth_provider" varchar (10), "oauth_uid" text, "oauth_token" text, "oauth_secret" text, "användarnamn" text, PRIMARY KEY id ')) ENGINE = MyISAM DEFAULT CHARSET = latin1;

Lägg märke till oauth_token och oauth_secret fält. Twitters OAuth kräver tecken och a token_secret värden för att autentisera användarna, så det är därför vi inkluderar dem. Med det är vi färdiga med installationen!


Steg 2: Registrera användare

I detta steg kommer vi att göra tre saker:

  • Begär godkännande från Twitter.
  • Registrering eller, om användaren redan är registrerad, loggar användaren in.
  • Ställer in data i en session.

Begär tillstånd

OAuth-arbetsflödet börjar genom att generera en URL för begäran. användaren omdirigeras till den webbadressen och blir ombedd att få tillstånd. Efter att ha beviljat det, omdirigerar programmet tillbaka till vår server med två tokens i URL-parametrarna, som krävs för autentisering.

Låt oss börja med att inkludera biblioteket och starta en sessionshanterare.

 kräver ( "twitteroauth / twitteroauth.php"); session_start ();

Låt oss sedan skapa en ny TwitterOAuth-förekomst, vilket ger den konsumentnyckeln och konsumenthemligheten som Twitter gav oss när vi skapade applikationen. Då ska vi begära autentiseringstoken, spara dem till sessionen och vidarebefordra användaren till Twitter för godkännande.

 // TwitterOAuth-instansen $ twitteroauth = ny TwitterOAuth ('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET'); // Begär autentiseringstoken, parametern är den URL som vi kommer att omdirigeras till $ request_token = $ twitteroauth-> getRequestToken ('http://localhost.com/twitter_oauth.php'); // Spara dem i sessionen $ _SESSION ['oauth_token'] = $ request_token ['oauth_token']; $ _SESSION ['oauth_token_secret'] = $ request_token ['oauth_token_secret']; // Om allt går bra ... om ($ twitteroauth-> http_code == 200) // Låt oss generera URL och omdirigera $ url = $ twitteroauth-> getAuthorizeURL ($ request_token ['oauth_token']); rubrik ("Plats:". $ url);  else // Det är en dålig idé att döda manuset, men vi måste veta när det finns ett fel. dö ("Något fel har hänt."); 

Spara det som twitter_login.php, gå till http://localhost.com/twitter_login.php eller vad ditt lokala värdnamn är. Om allt gick rätt, bör du omdirigeras till twitter.com, och du borde se något så här.

Klicka på tillåt och du omdirigeras till http://localhost.com/twitter_oauth.php -- eftersom vi ställer in denna webbadress som en parameter i getRequestToken påstående. Vi har inte skapat den filen, så det borde göra ett fel. Skapa den filen, och inkludera sedan biblioteket och starta en session, precis som vi gjorde i den första filen.

Därefter behöver vi tre saker:

  • Auth verifier i URL-sökdata
  • Auth token från sessionen
  • Auth hemlighet från sessionen

Så det första att göra i det här skriptet validerar denna data och omdirigeras om en av dessa variabler är tom.

 om ! tomt ($ _ GET ['oauth_verifier']) &&! tomt ($ _ SESSION ['oauth_token']) &&! tomt ($ _ SESSION ['oauth_token_secret'])) // Vi har allt vi behöver // Något saknas, gå tillbaka till kvadrat 1 rubrik ('Plats: twitter_login.php'); 

Nu, om allt är satt, inuti den villkorliga kommer vi att skapa TwitterOAuth-förekomsten, men med tokensna fick vi bara som tredje och fjärde parametrar; efter det kommer vi att få åtkomsttoken, vilket är en matris. Det token är det vi ska spara till databasen. Slutligen gör vi ett snabbtest för att se om allt fungerar.

 // TwitterOAuth exempel med två nya parametrar vi fick i twitter_login.php $ twitteroauth = ny TwitterOAuth ('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET', $ _SESSION ['oauth_token'], $ _SESSION ['oauth_token_secret']); // Låt oss begära access token $ access_token = $ twitteroauth-> getAccessToken ($ _ GET ['oauth_verifier']); // Spara det i en session var $ _SESSION ['access_token'] = $ access_token; // Låt oss få användarens info $ user_info = $ twitteroauth-> get ('account / verify_credentials'); // Skriv ut användarens info print_r ($ user_info);

Om ingenting går fel, print_r bör visa användarens data. Du kan få användarens ID med $ User_info-> id, hans eller hennes användarnamn med $ User_info-> SCREEN_NAME; det finns också en hel del annan information där också.

Det är väldigt viktigt att inse att oauth_verifier har inte använts före detta. Om du ser användarens information korrekt och sedan laddar om sidan, kommer skriptet att kasta ett fel eftersom denna variabel har använts. Gå bara tillbaka till twitter_login.php och det kommer automatiskt att generera ett nytt friskt token.

Registrera användare

Nu när vi har användarens info kan vi fortsätta och registrera dem, men först måste vi kontrollera om de finns i vår databas. Låt oss börja med att ansluta till databasen. Lägg till dessa rader i skriptets början.

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

Ändra databasinformationen efter behov. Nu, precis nedanför var vi hämtar användarens info, måste vi kolla efter användaren i vår databas. Om han eller hon inte är där kommer vi ange informationen. Om användaren har registrerats måste vi uppdatera token, eftersom Twitter har genererat nya och de vi har i databasen är nu oanvändbara. Slutligen ställer vi användarens information till sessionen vars och omdirigeras till twitter_update.php.

 om (isset ($ user_info-> error)) // Något är fel, gå tillbaka till kvadrat 1 rubrik ('Plats: twitter_login.php');  else // Låt oss hitta användaren med sin ID $ query = mysql_query ("VÄLJ * FRÅN användare WHERE oauth_provider = 'twitter' OCH oauth_uid =". $ user_info-> id); $ result = mysql_fetch_array ($ query); // Låt oss lägga till det i databasen om (tomt ($ resultat)) $ query = mysql_query ("INSERT INTO users (oauth_provider, oauth_uid, användarnamn, 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 ("VÄLJ * FRÅN användare WHERE id =". mysql_insert_id ()); $ result = mysql_fetch_array ($ query);  else // Uppdatera tokens $ query = mysql_query ("UPDATE-användare SET oauth_token = '$ access_token [' oauth_token ']', oauth_secret = '$ access_token [' oauth_token_secret ']' VAR Oauth_provider = 'twitter' OCH oauth_uid = $ user_info-> id ");  $ _SESSION ['id'] = $ resultat ['id']; $ _SESSION ['användarnamn'] = $ resultat ['användarnamn']; $ _SESSION ['oauth_uid'] = $ resultat ['oauth_uid']; $ _SESSION ['oauth_provider'] = $ resultat ['oauth_provider']; $ _SESSION ['oauth_token'] = $ resultat ['oauth_token']; $ _SESSION ['oauth_secret'] = $ resultat ['oauth_secret']; rubrik ('Plats: twitter_update.php'); 

Observera att dessa frågor inte är validerade. Om du lämnar dem som de är, lämnar du din databas sårbar. Slutligen, under databasanslutningen, bör vi ställa in en check för att verifiera att användaren är inloggad.

 om (! tomt ($ _ SESSION ['användarnamn'])) // Användaren är inloggad, omdirigeringsrubrik ('Plats: twitter_update.php'); 

Du kan nu hälsa användaren med sitt användarnamn.

 

Hej

Låt oss komma till den roliga sidan: uppdatering, följa och läsa.


Steg 3: Läsestatuser

Det finns över tjugo kategorier av resurser tillgängliga: tidslinje, tweets, användare, trender, listor, direktmeddelanden etc. Var och en har en massa metoder, du kan kontrollera dem alla i den officiella dokumentationen. Vi kommer till grunderna, eftersom de flesta av dessa funktioner är åtkomliga på ett liknande sätt.

Precis som de andra två skripten måste vi skapa TwitterOAuth-förekomsten, inklusive variablerna i sessionen.

 om ! tomt ($ _ SESSION ['användarnamn'])) $ twitteroauth = ny TwitterOAuth ('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET', $ _SESSION ['oauth_token'], $ _SESSION ['oauth_secret']); 

Vi börjar med användarens tidslinje. Referensen berättar för oss att banan är status / home_timeline; ignorera version och formatera, biblioteket tar hand om det.

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

Det får dig tidslinjen. Du kan hämta varje objekt med en för varje slinga. Referensen anger emellertid några valfria parametrar som räkna, vilket begränsar hur många tweets kommer att hämtas. Faktiskt, skaffa sigs andra parameter är en uppsättning av alla nödvändiga alternativ, så om du vill hämta de senaste fyrtio tweetsna, här är koden:

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

Du kan också se någon annans tidslinje, så länge den inte är skyddad. status / user_timeline kräver antingen en användares id eller skärmnamn. Om du vill kontrollera @nettuts tidslinje måste du använda följande kod:

 $ nettuts_timeline = $ twitteroauth-> få ('statuses / user_timeline', array ('screen_name' => 'netutsatser'));

Som du kan se, efter autentisering är läsning av tidslinjer en bris.


Steg 4: Vänskap

Med vänskap kan du kontrollera om en användare följer en annan, samt följa eller avveckla andra användare. Det här koden kommer att kontrollera om du följer mig och och kommer att skapa följa om inte.

Men först kolla vänskap / existerar och vänskap / skapa referens. Lägg märke till något? vänskap / skapa Metoden är POST. Lyckligtvis innehåller biblioteket en posta() funktion, som fungerar precis som skaffa sig() fungera; Den största skillnaden är det skaffa sig() är för läsning och posta() är för att skapa, radera eller uppdatera.

Hur som helst, vänskap / existerar kräver två parametrar: USER_A och user_b, och vänskap / skapa kräver bara en, antingen skärmnamn eller användar ID.

 $ follow_faelazo = $ twitteroauth-> get ('vänskap / existerar', array ('user_a' => $ _SESSION ['användarnamn'], 'user_b' => 'faelazo')); om (! $ följer_faelazo) echo 'Du följer INTE @faelazo!'; $ twitteroauth-> post ("vänskap / skapa", array ('screen_name' => 'faelazo')); 

Du kan följa upp en användare med i princip samma kod som skapar en följd, ersätt bara skapa med förstöra:

 $ follow_faelazo = $ twitteroauth-> get ('vänskap / existerar', array ('user_a' => $ _SESSION ['användarnamn'], 'user_b' => 'faelazo')); om ($ följer_faelazo) echo 'Du följer @faelazo! Fortsätt att följa upp ... '; $ twitteroauth-> post ('vänskap / förstör', array ('screen_name' => 'faelazo')); 

Steg 5: Posta uppdateringar

Det här är förmodligen det mest intressanta avsnittet, eftersom det är Twitter: s kärna: att lägga upp en uppdatering, som du kanske har föreställt dig, är ganska enkel. Banan är status / uppdatering, Metoden är POST (eftersom vi inte läser), och det krävs argumentet är status.

 $ twitteroauth-> post ('statuses / update', array ('status' => 'Hej Nätverk +'));

Gå nu till din Twitter-profilsida och du kommer se din tweet.

Låt oss uppdatera @Nettuts 'uppdatering som meddelar HTML 5-tävlingen; status-id är 19706871538 och referensen berättar för oss att banan är status / retweet /: id, där det : id en del är status-id som vi kommer att retweeting. Metoden är POST och det kräver inga ytterligare parametrar.

 $ Twitteroauth-> post (status / retweet / 19706871538 ');

För att radera en tweet måste du skicka det status-ID som du förstör först i den första parametern, precis som om retweeting. Om tweets id är 123456789, kommer koden att förstöra vara.

 $ Twitteroauth-> post (status / förstöra / 123456789 ');

Naturligtvis kan den här koden bara radera tweet som gjorts av den autentiserade användaren.


Slutsatser

Twitter API är ganska lätt att förstå; Det är mycket mer dokumenterat än även Facebook (även om Facebook erbjuder ett internt bibliotek). Tyvärr är autentiseringen inte så jämn som vi hoppas, beroende på sessiondata.

En sak som är värt att notera är att när en Twitter-användare har blivit auktoriserad (förutsatt att appen har läs- och skrivbehörigheter), har du gott om kontroll över det här kontot. Om du ändrar något på användarens vägnar utan hans tillåtelse skapar du problem. Använd det försiktigt!

API-ändringarna som kommer till Twitter kommer att neka grundläggande autentisering; Twitter fokuserar på att upphöra med de otaliga bedrägerier som lurar användarna på att ge upp sina inloggningsuppgifter. OAuth är lösningen; och om du har arbetat med Facebook Connect-handledningen kan du nu ge dina webbplats- eller appanvändare en snabb inloggning utan inloggningsuppgifter, med ditt val av de två mest använda sociala nätverk. Hur coolt är inte det?