Ultimamente, c'è stata una certa confusione nella registrazione pigra. Si scopre che meno l'utente deve pensare, maggiori sono i tassi di conversione! Che pensiero! Se tutti sembrano avere un profilo Facebook, perché non aggiungere una registrazione utente con un clic? Ti mostrerò come farlo oggi.
Iniziamo creando una tabella di database.
CREATE TABLE 'users' ('id' int (10) non firmato NOT NULL AUTO_INCREMENT, 'oauth_provider' varchar (10), 'oauth_uid' testo, 'username' testo, PRIMARY KEY ('id')) ENGINE = MyISAM DEFAULT CHARSET = latin1;
Abbastanza semplice: imposteremo una tabella per le informazioni dell'utente con ID, nome utente, nome e cognome, l'URL dell'immagine dell'utente e la data registrata. Inoltre, stiamo aggiungendo entrambi oauth_provider
e oauth_uid
campi, per distinguere tra diversi protocolli di autenticazione aperti di terze parti e i loro identificatori. Ad esempio, diciamo che, la prossima settimana, decidi che è una buona idea anche far entrare gli utenti di Twitter. Facile; hai appena impostato un altro valore per l'oauthfornitore, ed evitare di duplicare oauthvalori uid.
Iniziamo creando una nuova applicazione. Dagli un nome e accetta i termini e le condizioni. Quindi, afferra entrambi Chiave API e Segreto nella scheda di base come mostrato di seguito.
Nella scheda dell'area di lavoro, imposta entrambi URL della tela e URL di reindirizzamento post-autorizzazione al tuo localhost e al percorso che lo script elaborerà, qualcosa di simile http://localhost.com/login_facebook.php?
. Nota il punto interrogativo alla fine e il dominio; entrambi sono richiesti da Facebook. Basta impostare il tuo padroni di casa
file con un nome di dominio valido.
Nella scheda Connetti, imposta l'URL di connessione sullo stesso valore e imposta localhost.com
(o quello che stai usando) come Base Domain.
Ora salva, scarica la libreria client e decomprimi facebook.php
nel src
dir in una nuova directory creata nella radice.
Il flusso di autenticazione ha tre passaggi:
Facciamo un test rapido prima di registrarti e accedere.
# Richiediamo la richiesta della libreria ("facebook.php"); # Creazione dell'oggetto facebook $ facebook = new Facebook (array ('appId' => 'YOUR_APP_ID', 'secret' => 'YOUR_APP_SECRET', 'cookie' => true)); # Vediamo se abbiamo una sessione attiva $ session = $ facebook-> getSession (); se (! empty ($ session)) # Active session, proviamo a ottenere l'id utente (getUser ()) e le informazioni utente (api -> ('/ me')) prova $ uid = $ facebook-> getUser ( ); $ user = $ facebook-> api ('/ me'); catch (Exception $ e) if (! empty ($ user)) # Informazioni utente ok? Stampiamolo (qui aggiungeremo le routine di login e di registrazione) print_r ($ user); else # Per scopi di test, se c'è stato un errore, uccidiamo il dado dello script ("C'è stato un errore."); else # Non c'è una sessione attiva, generiamo $ login_url = $ facebook-> getLoginUrl (); intestazione ("Posizione:". $ login_url);
Ora vai http://localhost.com/login_facebook.php
, e vediamo cosa succede. Se vieni reindirizzato su Facebook e hai richiesto il permesso, siamo sulla strada giusta.
Tuttavia, potrebbero esserci due problemi. Il primo: se vieni reindirizzato su Facebook, ma mostra un errore, potrebbe esserci un valore mancante nella configurazione. Torna alle impostazioni dell'applicazione e controlla le schede Connect e Canvas e assicurati che i campi siano corretti come descritto sopra.
Potrebbe esserci un altro problema, in cui viene visualizzato un errore, ad esempio "Uncaught CurlException: 60: problema con il certificato SSL, verificare che il certificato CA sia OK". Questo succede a causa delle impostazioni di CURL. Dovrai aprire facebook.php
, trova il metodo makeRequest () e, all'interno della funzione, trova questa riga:
$ opts = self :: $ CURL_OPTS;
Subito dopo, aggiungi:
$ opts [CURLOPT_SSL_VERIFYPEER] = falso;
Odio le librerie di hacking, ma non ho trovato un altro modo. Bene, continuiamo con la registrazione dell'utente. Ho anche aggiunto una dichiarazione try / catch, perché se ci sono delle vecchie chiavi di sessione nei parametri GET nell'URL, lo script morirà con un errore orribile.
Lavoreremo prossimamente con MySQL. Si prega di notare che non implementerò un disinfettante dati, dal momento che voglio mantenere il codice il più breve e il compito possibile. Tieni presente questo: disinfetti sempre i tuoi dati.
Per prima cosa, connettiamoci al database.
mysql_connect ('localhost', 'YOUR_USERNAME', 'YOUR_PASSWORD'); mysql_select_db ( 'YOUR_DATABASE');
Ora, lavoriamo su $ session
condizionale, nel caso avessimo una sessione.
# Abbiamo una sessione attiva; controlliamo se abbiamo già registrato l'utente $ query = mysql_query ("SELECT * FROM users WHERE oauth_provider = 'facebook' AND oauth_uid =". $ user ['id']); $ result = mysql_fetch_array ($ query); # Se non lo è, aggiungiamolo al database if (vuoto ($ result)) $ query = mysql_query ("INSERT INTO utenti (oauth_provider, oauth_uid, username) VALUES ('facebook', $ user ['id'] , '$ utente [' nome ']') "); $ query = msyql_query ("SELECT * FROM users WHERE id =". mysql_insert_id ()); $ result = mysql_fetch_array ($ query);
Si noti che sto interrogando il database, cercando Facebook
come un oauth_provider
; è generalmente una buona idea, se vuoi accettare altri fornitori di OAuth (come Twitter, account Google, Open ID, ecc.) e un oauth_uid
, poiché è l'identificatore che il provider fornisce ai suoi account utente.
Il oauth_provider
campo potrebbe potenzialmente portare a cattive prestazioni se lo lasciamo come un testo
tipo di campo. Pertanto, l'opzione migliore è impostarla su un tipo ENUM.
Abbiamo ora a $ result
var con i valori interrogati dal database. Aggiungiamo poi alcune sessioni. Aggiungi questa riga all'inizio del tuo script.
session_start ();
Dopo il vuota ($ result)
condizionale, aggiungere quanto segue:
if (! empty ($ user)) # ... if (vuoto ($ result)) # ... # impostiamo i valori di sessione $ _SESSION ['id'] = $ result ['id']; $ _SESSION ['oauth_uid'] = $ result ['oauth_uid']; $ _SESSION ['oauth_provider'] = $ result ['oauth_provider']; $ _SESSION ['username'] = $ result ['username'];
Poiché ha poco senso autenticare un utente che ha già effettuato l'accesso, appena sotto il session_start ()
linea, aggiungere:
if (! empty ($ _ SESSION)) header ("Location: home.php");
E negli script che richiedono l'autenticazione, basta aggiungere:
session_start (); if (! empty ($ _ SESSION)) header ("Location: login_facebook.php");
E se si desidera visualizzare il nome utente, accedervi come una matrice.
echo 'Benvenuto'. $ _SESSION [ 'username']; # o ... echo 'Benvenuto'. ! empty ($ _ SESSION)? $ _SESSION ['username']: 'guest';
Facebook ha un sacco di funzioni di connessione, ma qui ci sono quattro che ho trovato per essere il più utile.
Potrei mancare qualcosa, ma l'FQL sembra più flessibile e facile rispetto all'API Graph. Fortunatamente, Facebook consente ancora agli sviluppatori di utilizzarlo, nonostante la nuova libreria, è leggermente cambiato.
Se si desidera l'ID utente, il nome, il cognome, la miniatura quadrata per l'immagine dell'utente, l'immagine utente più grande disponibile e il suo genere, è possibile utilizzare il users.getInfo
metodo.
$ uid = $ facebook-> getUser (); $ api_call = array ('method' => 'users.getinfo', 'uids' => $ uid, 'fields' => 'uid, first_name, last_name, pic_square, pic_big, sex'); $ users_getinfo = $ facebook-> api ($ api_call);
È possibile controllare l'elenco completo dei campi disponibili per Users.getInfo.
È possibile ottenere lo stesso risultato, usando FQL.
$ uid = $ facebook-> getUser (); $ fql_query = array ('method' => 'fql.query', 'query' => 'SELECT uid, first_name, last_name, pic_square, pic_big, sex FROM user WHERE uid ='. $ uid); $ fql_info = $ facebook-> api ($ fql_query);
Ecco l'elenco delle tabelle a cui è possibile accedere con FQL, nonché i campi disponibili per gli utenti della tabella.
Facebook fornisce applicazioni con una certa interazione con i dati dell'utente, purché sia autorizzato. Con la vecchia API, l'autorizzazione per ulteriori autorizzazioni era disponibile esclusivamente per l'SDK di Javascript (anche se non ne sono del tutto sicuro). Con la nuova API, possiamo facilmente reindirizzare l'utente a una finestra di dialogo di autorizzazione in Facebook e tornare al nostro sito dopo che l'accesso è stato concesso o negato.
Nel seguente esempio, reindirizzeremo un utente per autorizzare aggiornamenti di stato, foto, video e note, il vero indirizzo email dell'utente, la data di nascita e l'accesso a foto e video.
$ uid = $ facebook-> getUser (); # req_perms è un elenco separato da virgole delle autorizzazioni necessarie $ url = $ facebook-> getLoginUrl (array ('req_perms' => 'email, user_birthday, status_update, publish_stream, user_photos, user_videos')); intestazione ("Posizione: $ url");
Ecco un elenco completo di autorizzazioni. Si noti che è possibile specificare sia l'url da indirizzare se l'utente accetta e l'URL da reindirizzare a se l'utente nega. La chiave per questi elementi dell'array è Il prossimo
e cancel_url
, rispettivamente. Ecco un rapido esempio:
$ url = $ facebook-> getLoginUrl (array ('req_perms' => 'email', 'next' => 'http://localhost.com/thanks.php', 'cancel_url' => 'http: // localhost .com / sorry.php '));
Se non specificato, il valore predefinito è la posizione dello script richiedente.
Poiché l'utente può facilmente revocare le autorizzazioni, l'applicazione dovrebbe sempre verificare se è stata concessa una determinata autorizzazione prima di utilizzarla, specialmente se si tratta di pubblicare qualcosa. Dovremo utilizzare l'API legacy, in quanto sembra non essere ancora completamente implementata con quella nuova.
$ uid = $ facebook-> getUser (); # users.hasAppPermission $ api_call = array ('method' => 'users.hasAppPermission', 'uid' => $ uid, 'ext_perm' => 'publish_stream'); $ users_hasapppermission = $ facebook-> api ($ api_call); print_r ($ users_hasapppermission);
Il ext_perm
supporterà solo la vecchia lista di permessi disponibili.
Pubblichiamo qualcosa sul muro dopo aver verificato che l'utente abbia il publish_stream
autorizzazione.
# controlliamo se l'utente ha concesso l'accesso alla pubblicazione nel muro $ api_call = array ('metodo' => 'users.hasAppPermission', 'uid' => $ uid, 'ext_perm' => 'publish_stream'); $ can_post = $ facebook-> api ($ api_call); se ($ can_post) # postalo! $ facebook-> api ('/'.$ uid.' / feed ',' post ', array (' message '=>' Dicendo ciao dalla mia app di Facebook! ')); echo 'Pubblicato!'; else die ('Autorizzazioni richieste!');
In sostanza, stiamo facendo una chiamata API a /
, utilizzando il metodo POST (secondo argomento) e un array come terzo argomento per i dati da inviare. In questo caso, questo terzo argomento supporta Messaggio
, collegamento
, immagine
, didascalia
, nome
e descrizione
. Ecco il codice:
$ facebook-> api ('/'.$ uid.' / feed ',' post ', array (' message '=>' Il messaggio ',' name '=>' The name ',' description '=>' La descrizione ',' caption '=>' The caption ',' picture '=>' http://i.imgur.com/yx3q2.png ',' link '=>' http://net.tutsplus.com / '));
Ecco come è pubblicato.
L'utente può facilmente revocare le autorizzazioni con due clic nel suo muro. Dovresti testare pesantemente cosa potrebbe accadere se un utente revocasse una o più autorizzazioni che sono vitali per il corretto funzionamento del tuo sito web, o anche se l'applicazione è completamente rimossa. Questo è importante.
Mentre le funzionalità di autenticazione di Facebook sono davvero utili, dal momento che così tante persone sono su Facebook in questi giorni, non è consigliabile utilizzarlo come unico metodo di autenticazione in un sito. Che dire di quelli che non hanno account Facebook? Non sono autorizzati ad accedere alla tua applicazione? Grazie per aver letto!