Come autenticare gli utenti con Twitter OAuth

A partire dal 16 agosto, Twitter non supporterà più il protocollo di autenticazione di base per la sua piattaforma. Ciò significa che l'unico modo per autenticare gli utenti sarà attraverso un'applicazione Twitter. In questo tutorial, ti mostrerò come utilizzare Twitter come sistema di autenticazione con un clic, proprio come abbiamo fatto con Facebook.


Passaggio 1: impostazione dell'applicazione

Per prima cosa dovremo impostare una nuova applicazione Twitter.

  • Registra una nuova app su dev.twitter.com/apps/
  • Compila i campi per il tuo sito di conseguenza, assicurati di selezionare Browser nel Tipo di applicazione, e impostare il URL di richiamata a qualcosa di simile http://localhost.com/twitter_login.php (http: // localhost / non sarà accettato perché non ha un nome di dominio).
  • Infine, seleziona Leggere scrivere. Compila il captcha, fai clic su "Registra applicazione" e accetta i Termini di servizio.

Ora vedrai lo schermo come mostrato di seguito.

Useremo il Chiave del consumatore e Segreto dei consumatori valori a breve.

Ora che è fatto, scarichiamo una libreria. Come codificheremo con PHP, sembra che il migliore sia twitteroauth; ma se usi un'altra lingua, qui troverai altre buone librerie.

Trovare la twitteroauth directory all'interno del file zip ed estrarla nella cartella dell'applicazione.

Infine, poiché stiamo utilizzando Twitter per autenticare gli utenti, avremo bisogno di una tabella di database per archiviare tali utenti. Ecco un rapido esempio di ciò che faremo.

 CREATE TABLE 'users' ('id' int (10) non firmato NOT NULL AUTO_INCREMENT, 'oauth_provider' varchar (10), 'oauth_uid' testo, 'oauth_token' testo, 'oauth_secret' testo, 'username' testo, PRIMARY KEY (' id ')) ENGINE = MyISAM DEFAULT CHARSET = latin1;

Notare il oauth_token e oauth_secret campi. Richiede OAuth di Twitter gettone e a token_secret valori per autenticare gli utenti, ecco perché li stiamo includendo. Con quello, abbiamo finito con l'installazione!


Passaggio 2: registrazione degli utenti

In questo passo, faremo tre cose:

  • Richiesta di autorizzazione da Twitter.
  • Registrazione o, se l'utente è già registrato, registrazione dell'utente.
  • Impostazione dei dati in una sessione.

Richiesta di autorizzazione

Il flusso di lavoro OAuth inizia generando un URL per la richiesta; l'utente viene reindirizzato a tale URL e viene richiesta l'autorizzazione. Dopo averlo concesso, l'applicazione reindirizza al nostro server con due token nei parametri URL, necessari per l'autenticazione.

Iniziamo includendo la libreria e avviando un gestore di sessioni.

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

Dopodiché, creiamo una nuova istanza di TwitterOAuth, dandogli la chiave del consumatore e il segreto del consumatore che Twitter ci ha dato quando abbiamo creato l'applicazione. Quindi, richiederemo i token di autenticazione, li salveremo alla sessione e reindirizzeremo l'utente a Twitter per l'autorizzazione.

 // L'istanza TwitterOAuth $ twitteroauth = new TwitterOAuth ('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET'); // Richiedendo i token di autenticazione, il parametro è l'URL che verrà reindirizzato a $ request_token = $ twitteroauth-> getRequestToken ('http://localhost.com/twitter_oauth.php'); // Salvandoli nella sessione $ _SESSION ['oauth_token'] = $ request_token ['oauth_token']; $ _SESSION ['oauth_token_secret'] = $ request_token ['oauth_token_secret']; // Se tutto va bene ... if ($ twitteroauth-> http_code == 200) // Generiamo l'URL e reindirizziamo $ url = $ twitteroauth-> getAuthorizeURL ($ request_token ['oauth_token']); intestazione ('Posizione:'. $ url);  else // È una cattiva idea uccidere lo script, ma dobbiamo sapere quando c'è un errore. die ('Qualcosa di sbagliato è successo.'); 

Salva come twitter_login.php, vai a http://localhost.com/twitter_login.php o qualunque sia il tuo nome host locale. Se tutto è andato a buon fine, dovresti essere reindirizzato su twitter.com e dovresti vedere qualcosa di simile.

Fai clic su Consenti e verrai reindirizzato a http://localhost.com/twitter_oauth.php -- dal momento che impostiamo questo URL come parametro nel getRequestToken dichiarazione. Non abbiamo creato quel file, quindi dovrebbe generare un errore. Crea quel file, quindi includi la libreria e avvia una sessione, proprio come abbiamo fatto nel primo file.

Dopo ciò, avremo bisogno di tre cose:

  • Autentificatore nei dati delle query URL
  • Token di autenticazione dalla sessione
  • Autentico segreto della sessione

Quindi, la prima cosa da fare in questo script è convalidare questi dati e reindirizzare se una di queste variabili è vuota.

 if (! empty ($ _ GET ['oauth_verifier']) &&! empty ($ _ SESSION ['oauth_token']) &&! vuoto ($ _ SESSION ['oauth_token_secret'])) // Abbiamo tutto quello che ci serve altro // Manca qualcosa, torna all'intestazione quadrata 1 ('Posizione: twitter_login.php'); 

Ora, se tutto è impostato, all'interno del condizionale creeremo l'istanza di TwitterOAuth, ma con i token che abbiamo appena ottenuto come terzo e quarto parametro; dopodiché, otterremo il token di accesso, che è una matrice. Quel token è quello che salveremo nel database. Infine, faremo un test rapido per vedere se tutto funziona.

 // Istanza TwitterOAuth, con due nuovi parametri che abbiamo ottenuto in twitter_login.php $ twitteroauth = new TwitterOAuth ('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET', $ _SESSION ['oauth_token'], $ _SESSION ['oauth_token_secret']); // Richiediamo il token di accesso $ access_token = $ twitteroauth-> getAccessToken ($ _ GET ['oauth_verifier']); // Salvalo in una sessione var $ _SESSION ['access_token'] = $ access_token; // Otteniamo le informazioni dell'utente $ user_info = $ twitteroauth-> get ('account / verify_credentials'); // Stampa le informazioni dell'utente print_r ($ user_info);

Se nulla va storto, il print_r dovrebbe mostrare i dati dell'utente. Puoi ottenere l'ID dell'utente con $ User_info-> id, il suo nome utente con $ User_info-> SCREEN_NAME; ci sono un sacco di altre informazioni anche lì.

È molto importante rendersi conto che il oauth_verifier non è mai stato usato prima di questo Se visualizzi correttamente le informazioni dell'utente e poi ricarichi la pagina, lo script genererà un errore poiché questa variabile è stata utilizzata. Torna indietro twitter_login.php e genererà automaticamente un altro token fresco.

Registrazione degli utenti

Ora che abbiamo le informazioni dell'utente possiamo andare avanti e registrarle, ma prima dobbiamo controllare se esistono nel nostro database. Iniziamo connettendoci al database. Aggiungi queste linee all'inizio del copione.

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

Modifica le informazioni del database come richiesto. Ora, appena sotto dove recuperiamo le informazioni dell'utente, dovremo controllare l'utente nel nostro database. Se lui o lei non è lì, inseriremo le informazioni. Se l'utente è stato registrato, dobbiamo aggiornare i token, perché Twitter ne ha generati di nuovi e quelli che abbiamo nel database sono ora inutilizzabili. Infine, impostiamo le informazioni dell'utente sulle vars di sessione e reindirizza a twitter_update.php.

 if (isset ($ user_info-> error)) // Qualcosa non va, torna all'intestazione square 1 ('Location: twitter_login.php');  else // Troviamo l'utente tramite ID $ query = mysql_query ("SELECT * FROM users WHERE oauth_provider = 'twitter' AND oauth_uid =". $ user_info-> id); $ result = mysql_fetch_array ($ query); // In caso contrario, aggiungiamolo al database if (vuoto ($ 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 * FROM users WHERE id =". mysql_insert_id ()); $ result = mysql_fetch_array ($ query);  else // Aggiorna i token $ query = mysql_query ("UPDATE users SET oauth_token = '$ access_token [' oauth_token ']', oauth_secret = '$ access_token [' oauth_token_secret ']' WHERE oauth_provider = 'twitter' 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'); 

Si noti che queste query non sono convalidate; se li lasci così come sono, stai lasciando il tuo database vulnerabile. Infine, sotto la connessione al database, dovremmo impostare un controllo per verificare che l'utente abbia effettuato l'accesso.

 if (! empty ($ _ SESSION ['username'])) // L'utente ha effettuato l'accesso, reindirizza l'intestazione ('Location: twitter_update.php'); 

Ora puoi salutare l'utente con il suo nome utente.

 

Ciao

Andiamo al lato divertente: aggiornamento, seguito e lettura.


Passaggio 3: Lettura degli stati

Ci sono oltre venti categorie di risorse disponibili: cronologia, tweet, utenti, tendenze, elenchi, messaggi diretti, ecc. Ognuno ha un sacco di metodi, è possibile verificarli tutti nella documentazione ufficiale. Raggiungeremo le basi, poiché la maggior parte di queste funzionalità è accessibile in modo simile.

Proprio come gli altri due script, dovremo creare l'istanza di TwitterOAuth, incluse le variabili nella sessione.

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

Inizieremo con la cronologia dell'utente. Il riferimento ci dice che il percorso è stati / home_timeline; ignorare il versione e formato, la biblioteca si prenderà cura di esso.

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

Questo ti porterà la cronologia. Puoi recuperare ogni oggetto con a per ciascuno ciclo continuo. Tuttavia, il riferimento specifica alcuni parametri opzionali come contare, che limita il numero di tweets che verranno scaricati. Infatti, ottenereIl secondo parametro è una matrice di ogni opzione necessaria, quindi se vuoi recuperare gli ultimi quaranta tweet, ecco il codice:

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

Inoltre, puoi vedere la timeline di qualcun altro, purché non sia protetta. stati / user_timeline richiede l'ID di un utente o il nome dello schermo. Se si desidera controllare la cronologia di @nettuts, è necessario utilizzare il seguente frammento:

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

Come puoi vedere, dopo l'autenticazione, la lettura delle timeline è un gioco da ragazzi.


Step 4: Amicizie

Con le amicizie, puoi verificare se un utente ne segue un altro, oppure seguire o smettere di seguire altri utenti. Questo snippet controllerà se mi stai seguendo e creerò il seguito se non lo farai.

Ma prima, controlla il amicizie esiste / e amicizie / creano riferimento. Nota qualcosa? amicizie / creano il metodo è POST. Fortunatamente, la libreria include a inviare() funzione, che funziona proprio come il ottenere() funzione; la differenza principale è quella ottenere() è per leggere e inviare() è per la creazione, l'eliminazione o l'aggiornamento.

In ogni modo, amicizie esiste / richiede due parametri: user_a e user_b, e amicizie / creano ne richiede solo uno Nome della schermata o ID utente.

 $ follows_faelazo = $ twitteroauth-> get ('friendships / exists', array ('user_a' => $ _SESSION ['username'], 'user_b' => 'faelazo')); if (! $ follows_faelazo) echo 'NON stai seguendo @faelazo!'; $ twitteroauth-> post ('friends / create', array ('screen_name' => 'faelazo')); 

Puoi smettere di seguire un utente con lo stesso codice che crea un seguito, basta sostituire creare con distruggere:

 $ follows_faelazo = $ twitteroauth-> get ('friendships / exists', array ('user_a' => $ _SESSION ['username'], 'user_b' => 'faelazo')); if ($ follows_faelazo) echo 'Stai seguendo @faelazo! Procedi a unfollow ... '; $ twitteroauth-> post ('friendships / destroy', array ('screen_name' => 'faelazo')); 

Passaggio 5: pubblicazione degli aggiornamenti

Questa è probabilmente la sezione più interessante, dal momento che è il nucleo di Twitter: pubblicare un aggiornamento, come puoi immaginare, è piuttosto semplice. Il percorso è stati / aggiornamento, il metodo è POST (poiché non stiamo leggendo), e l'argomento richiesto è stato.

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

Ora vai alla pagina del tuo profilo Twitter e vedrai i tuoi tweet.

Retweet l'aggiornamento di @Nettuts che annuncia la competizione HTML 5; l'ID di stato è 19706871538 e il riferimento ci dice che il percorso è gli stati / Retweet /: id, dove il : id parte è lo status id che verrà retweeting. Il metodo è POST e non richiede parametri aggiuntivi.

 $ Twitteroauth-> Post ( 'status / Retweet / 19.706.871,538 mila');

Per eliminare un tweet, dovrai passare l'identificatore di stato che distruggeresti nel primo parametro, proprio come il retweet. Se l'ID del tweet è 123456789, il codice da distruggere sarà.

 $ Twitteroauth-> Post ( 'status / distruggere / 123456789');

Ovviamente, questo codice può solo cancellare i tweet creati dall'utente autenticato.


conclusioni

L'API di Twitter è abbastanza facile da capire; è molto più documentato di quello di Facebook (anche se Facebook offre una libreria interna). Sfortunatamente, l'autenticazione non è così liscia come potremmo sperare, a seconda dei dati della sessione.

Una cosa che vale la pena di notare è che, una volta che un utente di Twitter è stato autorizzato (supponendo che l'app abbia i permessi di lettura e scrittura), hai un sacco di controllo su questo account. Se cambi qualcosa per conto dell'utente senza il suo permesso, creerai problemi. Usalo con cautela!

Le modifiche API che arrivano su Twitter negheranno l'autenticazione di base; Twitter si sta concentrando sulla cessazione delle innumerevoli truffe che inducono gli utenti a rinunciare alle loro credenziali di accesso. OAuth è la soluzione; e, se hai seguito il tutorial di Facebook Connect, ora puoi fornire ai tuoi utenti di siti Web o app un accesso rapido senza credenziali, utilizzando la scelta dei due social network più utilizzati. Quant'è fico?