In letzter Zeit gab es eine ganze Fase über die faule Registrierung. Es stellt sich heraus, dass die Conversion-Raten umso höher sind, je weniger der Benutzer denken muss. Was für ein Gedanke! Wenn jeder ein Facebook-Profil zu haben scheint, können Sie eine Benutzerregistrierung mit einem Klick hinzufügen. Ich werde dir heute zeigen, wie das geht.
Beginnen wir mit dem Erstellen einer Datenbanktabelle.
CREATE TABLE 'users' ('id' int (10) vorzeichenlos NOT NULL AUTO_INCREMENT, 'oauth_provider' varchar (10), 'oauth_uid' text, 'username' text, PRIMARY KEY ('id')) ENGINE = MyISAM DEFAULT CHARSET = latin1;
Ganz einfach: Wir werden eine Tabelle mit Informationen zu Benutzernamen mit Benutzername, Vor- und Nachname, der URL zum Benutzerbild und dem registrierten Datum einrichten. Außerdem fügen wir beide ein oauth_provider
und oauth_uid
Felder, um zwischen verschiedenen offenen Authentifizierungsprotokollen von Drittanbietern und deren Bezeichnern zu unterscheiden. Nehmen wir beispielsweise an, Sie würden nächste Woche entscheiden, dass es eine gute Idee ist, auch Twitter-Benutzer hereinzulassen. Einfach; Sie setzen einfach einen anderen Wert für die DurchsichtAnbieter, und vermeiden Sie das DuplizierenUID-Werte.
Beginnen wir mit dem Erstellen einer neuen Anwendung. Geben Sie ihm einen Namen und stimmen Sie den Bedingungen zu. Als nächstes greifen Sie beide API-Schlüssel und Geheimnis in der Grundregisterkarte wie unten gezeigt.
Legen Sie auf der Leinwand-Registerkarte sowohl die Canvas-URL und Weiterleitungs-URL nach Autorisierung zu Ihrem localhost und Pfad, den das Skript verarbeiten wird - etwa so http://localhost.com/login_facebook.php?
. Beachten Sie das Fragezeichen am Ende und die Domäne. Beide werden von Facebook benötigt. Einfach einstellen Gastgeber
Datei auf einen gültigen Domänennamen.
Legen Sie auf der Registerkarte "Verbinden" die Verbindungs-URL auf denselben Wert und Satz fest localhost.com
(oder die von Ihnen verwendete) als Basisdomäne.
Speichern Sie nun, laden Sie die Client-Bibliothek herunter und entpacken Sie sie facebook.php
in dem src
dir zu einem neuen Verzeichnis, das im Stammverzeichnis erstellt wurde.
Der Authentifizierungsablauf umfasst drei Schritte:
Lassen Sie uns einen kurzen Test machen, bevor Sie sich registrieren und einloggen.
# Wir benötigen die Bibliothek erfordern ("facebook.php"); # Erstellen des Facebook-Objekts $ facebook = neues Facebook (Array ('appId' => 'YOUR_APP_ID', 'secret' => 'YOUR_APP_SECRET', 'cookie' => true)); # Mal sehen, ob wir eine aktive Sitzung haben. $ Session = $ facebook-> getSession (); if (! empty ($ session)) # Aktive Sitzung, versuchen wir, die Benutzer-ID (getUser ()) und die Benutzerinformationen (api -> ('/ me')) abzurufen. versuchen Sie es mit $ uid = $ facebook-> getUser ( ); $ user = $ facebook-> api ('/ me'); catch (Ausnahme $ e) if (! empty ($ user)) # Benutzerinfo ok? Lassen Sie es uns ausdrucken (Hier fügen wir die Anmelde- und Registrierungsroutinen hinzu) print_r ($ user); else # Wenn zu Testzwecken ein Fehler aufgetreten ist, lassen Sie uns den Skriptwürfel töten ("Es ist ein Fehler aufgetreten."); else # Es ist keine aktive Sitzung vorhanden, generieren Sie eine $ login_url = $ facebook-> getLoginUrl (); header ("Location:". $ login_url);
Gehen Sie jetzt zu http://localhost.com/login_facebook.php
, und mal sehen was passiert. Wenn Sie zu Facebook weitergeleitet werden und um Erlaubnis gebeten werden, sind wir auf dem richtigen Weg.
Es kann jedoch zwei Probleme geben. Die erste: Wenn Sie zu Facebook umgeleitet werden, jedoch ein Fehler angezeigt wird, fehlt möglicherweise ein Wert in der Konfiguration. Gehen Sie zurück zu Ihren Anwendungseinstellungen und überprüfen Sie die Registerkarten Verbinden und Leinwand. Stellen Sie sicher, dass die Felder wie oben beschrieben in Ordnung sind.
Möglicherweise gibt es ein anderes Problem, bei dem ein Fehler angezeigt wird, z. B. "Nicht abgeholte CurlException: 60: Problem mit SSL-Zertifikat. Stellen Sie sicher, dass das CA-Zertifikat in Ordnung ist." Dies geschieht aufgrund der CURL-Einstellungen. Sie müssen sich öffnen facebook.php
, Suchen Sie die Methode makeRequest () und finden Sie in der Funktion diese Zeile:
$ opts = self :: $ CURL_OPTS;
Gleich danach folgendes hinzufügen:
$ wählt [CURLOPT_SSL_VERIFYPEER] = false;
Ich hasse es, Bibliotheken zu hacken, aber ich habe keinen anderen Weg gefunden. Nun, fahren wir mit der Benutzerregistrierung fort. Ich habe auch eine try / catch-Anweisung hinzugefügt, denn wenn in den URLs der GET-Parameter alte Sitzungsschlüssel vorhanden sind, stirbt das Skript mit einem schrecklichen Fehler.
Als nächstes arbeiten wir mit MySQL. Bitte beachten Sie, dass ich keinen Data-Desinfizierer implementieren werde, da ich den Code so kurz und aufgabenorientiert wie möglich halten möchte. Bitte beachten Sie dies: Bereinigen Sie Ihre Daten immer.
Zuerst verbinden wir uns mit der Datenbank.
mysql_connect ('localhost', 'YOUR_USERNAME', 'YOUR_PASSWORD'); mysql_select_db ('YOUR_DATABASE');
Lass uns jetzt an der arbeiten $ session
bedingt, falls wir eine Sitzung haben.
# Wir haben eine aktive Sitzung. Lassen Sie uns prüfen, ob wir bereits den Benutzer $ query = mysql_query registriert haben ("SELECT * FROM Benutzer WHERE oauth_provider = 'facebook' AND oauth_uid =". $ user ['id']); $ result = mysql_fetch_array ($ query); # Wenn nicht, fügen Sie ihn der Datenbank hinzu, wenn (empty ($ result)) $ query = mysql_query ("INSERT INTO-Benutzer (oauth_provider, oauth_uid, username)) VALUES ('facebook', $ user ['id']) , '$ user [' name ']') "); $ query = msyql_query ("SELECT * FROM Benutzer WHERE id =". mysql_insert_id ()); $ result = mysql_fetch_array ($ query);
Beachten Sie, dass ich die Datenbank abfrage und suche Facebook
Als ein oauth_provider
; Im Allgemeinen ist es eine gute Idee, wenn Sie andere OAuth-Anbieter (wie Twitter, Google-Konten, Open ID usw.) akzeptieren möchten oauth_uid
, da dies die Kennung ist, die der Anbieter seinen Benutzerkonten gibt.
Das oauth_provider
Ein Feld könnte zu einer schlechten Leistung führen, wenn wir es als Text
Feldtyp. Daher ist die beste Option die Einstellung auf einen ENUM-Typ.
Wir haben jetzt eine $ Ergebnis
var mit den von der Datenbank abgefragten Werten. Als nächstes fügen wir einige Sitzungen hinzu. Fügen Sie diese Zeile am Anfang Ihres Skripts ein.
session_start ();
Nach dem leer ($ Ergebnis)
fügen Sie Folgendes hinzu:
if (! empty ($ user)) #… if (empty ($ result)) #… # Setzen wir die Sitzungswerte $ _SESSION ['id'] = $ result ['id']; $ _SESSION ['oauth_uid'] = $ result ['oauth_uid']; $ _SESSION ['oauth_provider'] = $ result ['oauth_provider']; $ _SESSION ['username'] = $ result ['username'];
Da macht es wenig Sinn, einen bereits angemeldeten Benutzer direkt unter dem zu authentifizieren session_start ()
Zeile hinzufügen:
if (! empty ($ _ SESSION)) header ("Location: home.php");
Und in den Skripten, die eine Authentifizierung erfordern, fügen Sie einfach Folgendes hinzu:
session_start (); if (! empty ($ _ SESSION)) header ("Location: login_facebook.php");
Wenn Sie den Benutzernamen anzeigen möchten, greifen Sie als Array darauf zu.
Echo "Willkommen". $ _SESSION ['Benutzername']; # oder… Echo 'Welcome'. ! leer ($ _ SESSION)? $ _SESSION ['username']: 'guest';
Facebook hat eine Menge Verbindungsfunktionen, aber hier sind vier, die ich für am nützlichsten gehalten habe.
Ich vermisse vielleicht etwas, aber die FQL scheint flexibler und einfacher zu sein als die Graph-API. Glücklicherweise erlaubt Facebook es Entwicklern immer noch, es zu verwenden, obwohl es mit der neuen Bibliothek etwas geändert wurde.
Wenn Sie die Benutzer-ID, den Vornamen, den Nachnamen, das quadratische Miniaturbild für das Benutzerbild, das größte verfügbare Benutzerbild und dessen Geschlecht anzeigen möchten, können Sie das verwenden users.getInfo
Methode.
$ uid = $ facebook-> getUser (); $ api_call = array ('method' => 'users.getinfo', 'uids' => $ uid, 'fields' => 'uid, Vorname, Nachname, pic_square, pic_big, sex'); $ users_getinfo = $ facebook-> api ($ api_call);
Sie können die vollständige Liste der für Users.getInfo verfügbaren Felder überprüfen.
Mit FQL kann das gleiche Ergebnis erzielt werden.
$ uid = $ facebook-> getUser (); $ fql_query = array ('method' => 'fql.query', 'query' => 'SELECT UID, Vorname, Nachname, Pic_Square, Pic_Big, Geschlecht FROM Benutzer WHERE UID ='. $ UID); $ fql_info = $ facebook-> api ($ fql_query);
Hier ist die Liste der Tabellen, auf die mit FQL zugegriffen werden kann, sowie die für die Tabellenbenutzer verfügbaren Felder.
Facebook bietet Anwendungen die Möglichkeit, mit den Daten des Nutzers zu interagieren - solange es autorisiert ist. Mit der alten API war die Berechtigung für zusätzliche Berechtigungen ausschließlich für das Javascript SDK verfügbar (obwohl ich nicht ganz sicher bin). Mit der neuen API können wir den Benutzer leicht zu einem Autorisierungsdialogfeld in Facebook umleiten und zu unserer Website zurückkehren, nachdem der Zugriff gewährt oder verweigert wurde.
Im folgenden Beispiel werden wir einen Benutzer umleiten, um Statusaktualisierungen, Fotos, Videos und Notizen, die tatsächliche E-Mail-Adresse des Benutzers, den Geburtstag und den Zugriff auf Fotos und Videos zu autorisieren.
$ uid = $ facebook-> getUser (); # req_perms ist eine durch Kommas getrennte Liste der erforderlichen Berechtigungen. $ url = $ facebook-> getLoginUrl (array ('req_perms' => 'email, user_birthday, status_update, publish_stream, user_photos, user_videos')); header ("Location: $ url");
Hier ist eine vollständige Liste der Berechtigungen. Beachten Sie, dass Sie sowohl die URL angeben können, an die weitergeleitet werden soll, wenn der Benutzer dies akzeptiert, als auch die URL, zu der umgeleitet werden soll, wenn der Benutzer dies ablehnt. Der Schlüssel für diese Array-Elemente lautet Nächster
und cancel_url
, beziehungsweise. Hier ein kurzes Beispiel:
$ url = $ facebook-> getLoginUrl (array ('req_perms' => 'email', 'next' => 'http://localhost.com/thanks.php'), 'cancel_url' => 'http: // localhost .com / sorry.php '));
Wenn nicht angegeben, ist der Standardwert der Speicherort des anfordernden Skripts.
Da der Benutzer Berechtigungen problemlos widerrufen kann, sollte die Anwendung vor der Verwendung immer prüfen, ob eine bestimmte Berechtigung erteilt wurde, insbesondere, wenn etwas veröffentlicht wird. Wir werden die ältere API verwenden müssen, da sie mit der neuen API noch nicht vollständig implementiert ist.
$ 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);
Das ext_perm
unterstützt nur die alte Liste der verfügbaren Berechtigungen.
Lassen Sie uns etwas an die Wand posten, nachdem Sie bestätigt haben, dass der Benutzer das hat publish_stream
Genehmigung.
# Überprüfen Sie, ob der Benutzer Zugriff auf die Veröffentlichung in der Pinnwand gewährt hat. $ api_call = array ('method' => 'users.hasAppPermission', 'uid' => $ uid, 'ext_perm' => 'publish_stream'); $ can_post = $ facebook-> api ($ api_call); if ($ can_post) # post it! $ facebook-> api ('/' .$ uid. '/ feed', 'post', array ('message' => 'Hallo von meiner Facebook-App!')); Echo 'Posted!'; else die ('Berechtigungen erforderlich!');
Im Wesentlichen machen wir einen API-Aufruf an /
, Verwenden der POST-Methode (zweites Argument) und eines Arrays als drittes Argument für die zu sendenden Daten. In diesem Fall unterstützt dieses dritte Argument Botschaft
, Verknüpfung
, Bild
, Bildbeschriftung
, Name
und Beschreibung
. Hier ist der Code:
$ facebook-> api ('/'.$ uid.' / feed ',' post ', array (' message '=>' Die Nachricht ',' name '=>' The name ',' description '=>' Die Beschreibung ',' caption '=>' The caption ',' picture '=>' http://i.imgur.com/yx3q2.png ',' link '=>' http://net.tutsplus.com / '));
So wird es veröffentlicht.
Der Benutzer kann Berechtigungen einfach mit zwei Klicks in seiner Wand widerrufen. Sie sollten gründlich testen, was passieren kann, wenn ein Benutzer eine oder mehrere Berechtigungen widerrufen hat, die für das ordnungsgemäße Funktionieren Ihrer Website unerlässlich sind, oder sogar, wenn die Anwendung vollständig entfernt wird. Das ist wichtig.
Die Authentifizierungsfunktionen von Facebook sind zwar in der Tat nützlich, da sich heutzutage so viele Menschen auf Facebook befinden, wird die Verwendung von Facebook als einzige Authentifizierungsmethode auf einer Website nicht empfohlen. Was ist mit denen, die keine Facebook-Konten haben? Dürfen sie nicht auf Ihre Bewerbung zugreifen? Danke fürs Lesen!