Cum să autentificați utilizatorii cu Twitter OAuth

Începând cu data de 16 august, Twitter nu va mai accepta protocolul de autentificare de bază pentru platforma sa. Aceasta înseamnă că singura modalitate de a autentifica utilizatorii va fi printr-o aplicație Twitter. În acest tutorial, vă vom arăta cum să utilizați Twitter ca sistem de autentificare cu un singur clic, la fel ca în cazul Facebook.


Pasul 1: Configurarea aplicației

Vom avea mai întâi nevoie să configurați o nouă aplicație Twitter.

  • Înregistrați o nouă aplicație la dev.twitter.com/apps/
  • Completați corespunzător câmpurile pentru site-ul dvs., asigurați-vă că selectați Browser în Tip de aplicație, și setați Adresă URL cu invers la ceva asemănător http://localhost.com/twitter_login.php (http: // localhost / nu va fi acceptat deoarece nu are un nume de domeniu).
  • În cele din urmă, selectați Citeste, scrie. Completați captcha-ul, faceți clic pe "Înregistrați aplicația" și acceptați Termenii și condițiile.

Acum, veți vedea ecranul după cum se arată mai jos.

Vom folosi Cheia de consum și Secretul consumatorilor valori în scurt timp.

Acum că acest lucru este făcut, să descărcăm o bibliotecă. Așa cum vom codifica cu PHP, se pare că cea mai bună este twitteroauth; dar dacă folosiți o altă limbă, veți găsi și alte biblioteci bune aici.

Găsi twitteroauth director în interiorul fișierului zip și extrageți-l în dosarul aplicației.

În sfârșit, din moment ce folosim Twitter pentru autentificarea utilizatorilor, vom avea nevoie de o tabelă de baze de date pentru a stoca acei utilizatori. Iată un exemplu rapid despre ceea ce vom face.

 CREATE TABLE "('id' int (10) nesemnate NOT NULL AUTO_INCREMENT, 'oauth_provider' varchar (10), text oauth_uid, text oauth_token, text oauth_secret, id ')) MOTOR = MyISAM DEFAULT CHARSET = latin1;

Observați oauth_token și oauth_secret câmpuri. Twitter necesită OAuth jeton și a token_secret valori pentru a autentifica utilizatorii, de aceea noi le includem. Cu asta, am terminat cu configurarea!


Pasul 2: Înregistrarea utilizatorilor

În acest pas, vom face trei lucruri:

  • Solicitarea autorizației de la Twitter.
  • Înregistrarea sau, în cazul în care utilizatorul este deja înregistrat, vă autentifică utilizatorul.
  • Setarea datelor într-o sesiune.

Solicitarea autorizației

Fluxul de lucru OAuth începe prin generarea unei adrese URL pentru solicitare; utilizatorul este redirecționat către respectiva adresă URL și vi se solicită autorizarea. După acordarea acesteia, aplicația se redirecționează către serverul nostru cu două jetoane în parametrii URL care sunt necesari pentru autentificare.

Să începem prin includerea bibliotecii și pornirea unui handler de sesiuni.

 necesită ( "twitteroauth / twitteroauth.php"); session_start ();

După aceea, să creăm o nouă instanță TwitterOAuth, oferindu-i cheia de consum și secretul consumatorilor pe care ni-l dă Twitter atunci când am creat aplicația. Apoi, vom solicita jetoanele de autentificare, le vom salva în sesiune și vom redirecționa utilizatorul către Twitter pentru autorizare.

 // instanța TwitterOAuth $ twitteroauth = noul TwitterOAuth ('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET'); // Solicitând jetoanele de autentificare, parametrul este URL-ul la care vom fi redirecționați la $ request_token = $ twitteroauth-> getRequestToken ('http://localhost.com/twitter_oauth.php'); // Salvarea lor în sesiune $ _SESSION ['oauth_token'] = $ request_token ['oauth_token']; $ _SESSION ['oauth_token_secret'] = $ request_token ['oauth_token_secret']; // Dacă totul merge bine ... dacă ($ twitteroauth-> http_code == 200) // Să generăm adresa URL și să redirecționăm $ url = $ twitteroauth-> getAuthorizeURL ($ request_token ['oauth_token']); antet ("Locație:". $ url);  altceva // Este o idee proastă de a ucide scenariul, dar trebuie să știm când există o eroare. mor ("Sa întâmplat ceva rău."); 

Salvați-o ca twitter_login.php, mergi la http://localhost.com/twitter_login.php sau indiferent de numele gazdei locale. Dacă totul a mers corect, ar trebui să fii redirecționat la twitter.com și ar trebui să vezi ceva de genul asta.

Faceți clic pe permiteți și veți fi redirecționat (ă) http://localhost.com/twitter_oauth.php -- deoarece am setat această adresă URL ca parametru în getRequestToken afirmație. Nu am creat acel dosar, deci ar trebui să arunci o eroare. Creați acel fișier, apoi includeți biblioteca și începeți o sesiune, la fel ca în primul fișier.

După aceasta, vom avea nevoie de trei lucruri:

  • Auth verificator în datele de interogare URL
  • Autocontest din sesiune
  • Auth secretă din sesiune

Deci, primul lucru de făcut în acest script este validarea acestor date și redirecționarea dacă una dintre aceste variabile este goală.

 ($ _ SESSION ['oauth_token_secret'])) // Avem tot ce avem nevoie altceva // Ceva lipsește, reveniți la antet pătrat ("Locație: twitter_login.php"); 

Acum, dacă totul este setat, în interiorul condiționalului vom crea instanța TwitterOAuth, dar cu token-urile am obținut doar al treilea și al patrulea parametru; după aceea, vom primi jetonul de acces, care este o matrice. Acest simbol este cel pe care îl vom salva în baza de date. În cele din urmă, vom face un test rapid pentru a vedea dacă totul funcționează.

 // TwitterOAuth exemplu, cu doi parametri noi pe care le-am primit în twitter_login.php $ twitteroauth = noul TwitterOAuth ('YOUR_CONSUMER_KEY','YOUR_CONSUMER_SECRET ', $ _SESSION [' oauth_token '], $ _SESSION [' oauth_token_secret ']); // Să solicităm accesul token $ access_token = $ twitteroauth-> getAccessToken ($ _GET ['oauth_verifier']); // Salvați-o într-o sesiune var $ _SESSION ['access_token'] = $ access_token; // Să obținem informațiile utilizatorului $ user_info = $ twitteroauth-> get ('account / verify_credentials'); // Tipăriți informațiile utilizatorului print_r ($ user_info);

Dacă nimic nu merge prost, print_r ar trebui să afișeze datele utilizatorului. Puteți obține ID-ul utilizatorului $ User_info-> id, numele său de utilizator cu $ User_info-> SCREEN_NAME; există și o grămadă de alte informații acolo.

Este foarte important să realizăm că oauth_verifier nu a fost folosit înainte de aceasta. Dacă vedeți corect informațiile despre utilizator și apoi reîncărcați pagina, scriptul va afișa o eroare de la utilizarea acestei variabile. Doar du-te înapoi twitter_login.php și va genera automat un alt simbol proaspăt.

Înregistrarea utilizatorilor

Acum, că avem informațiile utilizatorului, putem merge mai departe și le putem înregistra, dar mai întâi trebuie să verificăm dacă acestea există în baza noastră de date. Să începem prin conectarea la baza de date. Adăugați aceste linii în începutul scriptului.

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

Modificați informațiile bazei de date după cum este necesar. Acum, chiar mai jos de unde vom aduce informația utilizatorului, va trebui să verificăm utilizatorul din baza noastră de date. Dacă el sau ea nu este acolo, vom introduce informațiile. Dacă utilizatorul a fost înregistrat, trebuie să actualizăm token-urile, deoarece Twitter a generat altele noi, iar cele pe care le avem în baza de date sunt acum inutilizabile. În cele din urmă, setăm informațiile utilizatorului la sesiunile de sesiune și redirecționăm către twitter_update.php.

 dacă (isset ($ user_info-> error)) // Ceva nu merge, mergeți înapoi la antet pătrat ('Locație: twitter_login.php');  altfel // Să găsim utilizatorul după ID-ul lui query = mysql_query ("SELECT * FROM users WHERE oauth_provider = 'twitter' și oauth_uid =". $ user_info-> id); $ result = mysql_fetch_array ($ interogare); // Dacă nu, să o adăugăm la baza de date dacă (gol ($ rezultat)) $ query = mysql_query ("INSERT INTO users (oauth_provider, oauth_uid, username, oauth_token, oauth_secret) > $ access_token ['oauth_token_secret'] ');' id = ''; '; $ $ user_info-> screen_name'; $ query = mysql_query ("SELECT * FROM utilizatori WHERE id =" mysql_insert_id ()); $ result = mysql_fetch_array ($ interogare);  altfel // Actualizați token-urile $ query = mysql_query ("UPDATE users SET oauth_token = '$ access_token [' oauth_token ']', oauth_secret = '$ access_token [' oauth_token_secret ']' WHERE oauth_provider = ȘI oauth_uid = $ user_info-> id ");  $ _SESSION ['id'] = $ rezultat ['id']; $ _SESSION ['username'] = $ rezultat ['username']; $ _SESSION ['oauth_uid'] = $ rezultat ['oauth_uid']; $ _SESSION ['oauth_provider'] = $ rezultat ['oauth_provider']; $ _SESSION ['oauth_token'] = $ rezultat ['oauth_token']; $ _SESSION ['oauth_secret'] = $ rezultat ['oauth_secret']; antet ('Locație: twitter_update.php'); 

Rețineți că aceste interogări nu sunt validate; dacă le lăsați așa cum sunt, veți părăsi baza de date vulnerabilă. În cele din urmă, sub conexiunea bazei de date, trebuie să setăm o verificare pentru a verifica dacă utilizatorul este conectat.

 dacă ! empty ($ _ SESSION ['username'])) // Utilizatorul este conectat, antet de redirecționare ('Locație: twitter_update.php'); 

Acum puteți saluta utilizatorul după numele său de utilizator.

 

Salut

Să ajungem la partea distractivă: actualizarea, urmărirea și citirea.


Pasul 3: Citirea statusurilor

Există peste douăzeci de categorii de resurse disponibile: cronologie, tweet-uri, utilizatori, tendințe, liste, mesaje directe etc. Fiecare are o mulțime de metode, le puteți verifica pe toate în documentația oficială. Vom ajunge la elementele de bază, deoarece majoritatea acestor caracteristici sunt accesate în mod similar.

La fel ca celelalte două scripturi, va trebui să creăm instanța TwitterOAuth, inclusiv variabilele din sesiune.

 dacă ! empty ($ _SESSION ['username'])) $ twitteroauth = noul TwitterOAuth ('YOUR_CONSUMER_KEY','YOUR_CONSUMER_SECRET ', $ _SESSION [' oauth_token '], $ _SESSION [' oauth_secret ']); 

Vom începe cu linia de timp a utilizatorului. Referința ne spune că este calea Stările / home_timeline; ignorați versiune și format, biblioteca va avea grijă de ea.

 $ home_timeline = $ twitteroauth-> obține ('statuses / home_timeline'); print_r ($ home_timeline);

Asta vă va aduce cronologia. Puteți să preluați fiecare element cu un pentru fiecare buclă. Cu toate acestea, referința specifică câțiva parametri opțional cum ar fi numara, care limitează câte tweets vor fi preluate. De fapt, obțineal doilea parametru este o matrice a fiecărei opțiuni necesare, deci dacă doriți să preluați cele mai recente patruzeci de tweets, iată codul:

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

De asemenea, puteți vedea cronica altcuiva, atât timp cât nu este protejată. Stările / user_timeline necesită fie un nume de utilizator, fie un nume de ecran. Dacă doriți să verificați cronologia @nettuts, va trebui să utilizați următorul fragment:

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

După cum puteți vedea, după autentificare, citirea termenelor este o briză.


Pasul 4: Prietenii

Cu prietenii, poți verifica dacă un utilizator urmează altul, precum și dacă urmărește sau anulează ceilalți utilizatori. Acest fragment va verifica dacă mă urmărești și vei crea următorul mesaj dacă nu.

Dar, mai întâi, verificați prietenii / există și prietenii / crea referinţă. Observați ceva? prietenii / crea metoda este POST. Din fericire, biblioteca include a post() funcția, care funcționează la fel ca și obține() funcţie; principala diferență este aceea obține() este pentru citire și post() este pentru crearea, ștergerea sau actualizarea.

Oricum, prietenii / există necesită doi parametri: user_a și user_b, și prietenii / crea necesită doar unul Nume pe ecran sau numele de utilizator.

 $ follow_faelazo = $ twitteroauth-> get ('friendships / exists', array ('user_a' => $ _SESSION ['username'], 'user_b' => 'faelazo')); dacă (! $ follows_faelazo) echo 'NU NU urmați @faelazo!'; $ twitteroauth-> post ('friendships / create', array ('screen_name' => 'faelazo')); 

Puteți dezactiva un utilizator cu practic același cod care creează o urmărire, pur și simplu înlocuiți-o crea cu distruge:

 $ follow_faelazo = $ twitteroauth-> get ('friendships / exists', array ('user_a' => $ _SESSION ['username'], 'user_b' => 'faelazo')); dacă ($ follows_faelazo) echo 'Urmăriți @faelazo! Continuați să dezactivați ... '; $ twitteroauth-> poștă ("friendships / destroy", array ('screen_name' => 'faelazo')); 

Pasul 5: Postarea actualizărilor

Aceasta este, probabil, cea mai interesantă secțiune, deoarece este cheia Twitter: postarea unei actualizări, așa cum ați fi imaginat, este destul de simplă. Calea este Stările / actualizare, metoda este POST (deoarece nu citim), iar argumentul necesar este stare.

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

Acum du-te la pagina dvs. de profil Twitter și veți vedea tweet-ul dvs..

Să reluăm actualizarea @Nettuts anunțând concursul HTML 5; id-ul de stare este 19706871538 iar referința ne spune că calea este Stările / Retweet /: id, unde : id parte este id-ul de stare vom fi retweeting. Metoda este POST și nu necesită parametri suplimentari.

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

Pentru a șterge un tweet, va trebui să treceți codul de stare pe care îl veți distruge în primul parametru, la fel ca retweetingul. Dacă ID-ul tweet-ului este 123456789, codul va fi distrus.

 $ Twitteroauth-> post ( 'Stările / distrugerea / 123456789');

Desigur, acest cod poate șterge numai tweet-urile făcute de utilizatorul autentificat.


concluzii

API-ul Twitter este destul de ușor de înțeles; este mult mai documentat decât chiar Facebook (chiar dacă Facebook oferă o bibliotecă internă). Din păcate, autentificarea nu este la fel de netedă cum am putea să sperăm, în funcție de datele din sesiune.

Un lucru demn de remarcat este că, odată ce un utilizator Twitter a fost autorizat (presupunând că aplicația are permisiuni de citire și scriere), aveți un control foarte mare asupra acestui cont. Dacă schimbați ceva în numele utilizatorului fără permisiunea acestuia, veți crea probleme. Utilizați-l cu prudență!

Modificările API care vin pe Twitter vor nega autentificarea de bază; Twitter se concentrează pe înlăturarea nenumăratelor escrocheri care îi înșeală pe utilizatori să renunțe la acreditările lor de conectare. OAuth este soluția; și, dacă ați lucrat prin tutorialul Facebook Connect, puteți oferi utilizatorilor site-ului sau aplicațiilor dvs. un acces rapid fără acreditări, utilizând alegerea celor două rețele sociale cele mai utilizate. Cat de tare e asta?

Cod