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.
Per prima cosa dovremo impostare una nuova applicazione Twitter.
http://localhost.com/twitter_login.php
(http: // localhost /
non sarà accettato perché non ha un nome di dominio). 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!
In questo passo, faremo tre cose:
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:
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.
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 =(!empty($_SESSION['username']) ? '@' . $_SESSION['username'] : 'Guest'); ?>
Andiamo al lato divertente: aggiornamento, seguito e lettura.
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, ottenere
Il 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.
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'));
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.
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?