2014-05-03 19 views
5

Ich versuche, Facebook Login mit ihrem neuen PHP SDK 4.0 für meine Website zu arbeiten. Ich folgte ihrem Kern fast wortwörtlich und konnte immer noch nicht einmal eine Testseite zur Arbeit bringen. Wenn ich versuche, um mich einzuloggen, werde ich auf eine URL der Form umgeleitet:Facebook PHP SDK 4.0 Login

https://www.facebook.com/v2.0/dialog/oauth?client_id={some number}&redirect_uri{localhost%2F%7E{MyName}%2F{my site}}&state=08d94ec4670256aa2b2c586781590766&sdk=php-sdk-4.0.0&scope= 

Ich habe bereits die gleiche URL auf meiner Facebook-Entwickler-Seite ausgefüllt, und das ist der Code, den ich zu Test versuchen:

<?php 

require_once('Facebook/FacebookSession.php'); 
require_once('Facebook/FacebookRedirectLoginHelper.php'); 
require_once('Facebook/FacebookRequest.php'); 
require_once('Facebook/FacebookResponse.php'); 
require_once('Facebook/FacebookSDKException.php'); 
require_once('Facebook/FacebookRequestException.php'); 
require_once('Facebook/FacebookAuthorizationException.php'); 
require_once('Facebook/GraphObject.php'); 

use Facebook\FacebookSession; 
use Facebook\FacebookRedirectLoginHelper; 
use Facebook\FacebookRequest; 
use Facebook\FacebookResponse; 
use Facebook\FacebookSDKException; 
use Facebook\FacebookRequestException; 
use Facebook\FacebookAuthorizationException; 
use Facebook\GraphObject; 

// start session 
session_start(); 

// init app with app id and secret 
FacebookSession::setDefaultApplication('{My app ID}','{My app secret}'); 

// login helper with redirect_uri 
$helper = new FacebookRedirectLoginHelper('localhost/~{My Name}/{My Project}'); 

try { 
    $session = $helper->getSessionFromRedirect(); 
} catch(FacebookRequestException $ex) { 
    // When Facebook returns an error 
} catch(Exception $ex) { 
    // When validation fails or other local issues 
} 

// see if we have a session 
if (isset($session)) { 
    // graph api request for user data 
    $request = new FacebookRequest($session, 'GET', '/me'); 
    $response = $request->execute(); 
    // get response 
    $graphObject = $response->getGraphObject(); 

    // print data 
    echo '<pre>' . print_r($graphObject, 1) . '</pre>'; 
} else { 
    // show login url 
    echo '<a href="' . $helper->getLoginUrl() . '">Login</a>'; 
} 

Leider werde ich nie zurückgeleitet, oder sogar die Anmeldeseite laden. Was könnte ich hier falsch machen?

Antwort

0

Ist dies der Code, den Sie verwenden?

$helper = new FacebookRedirectLoginHelper('localhost/~{My Name}/{My Project}'); 

Sie werden von Facebook weitergeleitet, so dass das Argument hier eine URL aus dem Internet sein muss.

4

Sie müssen die PHP-Dateien nicht einschließen. Facebook möchte, dass Sie den Composer verwenden, um zu verwalten, was erforderlich ist.

Allerdings .... sie geben Ihnen eine Problemumgehung: Include autoload.php und behalten Sie die Dateistruktur, die Sie für die einfachste Implementierung geben. Für eine einfache, setzen Sie alle Dateien aus dem SDK in einen Ordner facebook genannt, so dass man dort einen Unterordner hat in src genannt und dass innerhalb von einem anderen namens Facebook

Dann erstellt das SDK eine Verbindung, die die Benutzer klicken können, um Autorisieren Sie den Zugriff auf Ihre App.

Wenn Sie testen, müssen Sie die App von Ihrem Facebook-Profil halten Löschen der Anmeldefenster jedes Mal (Settings oben rechts Dropdown, dann Apps links ab August 2014) zu bekommen, sonst wird es abprallen gerade durch Ihre angegebene Redirect-Seite und erscheint als ob nichts funktioniert.

// if you include this file you don't need to use composer 
require_once('facebook/autoload.php'); 

// use these 
use Facebook\FacebookSession; 
use Facebook\FacebookRedirectLoginHelper; 

// initiate the session 
FacebookSession::setDefaultApplication('[YOUR ID]', '[YOUR SECRET]'); 

// use the helper 
$helper = new FacebookRedirectLoginHelper('[YOUR REDIRECT URL]'); 
// get a loginurl 
$loginUrl = $helper->getLoginUrl(); 


echo "<a href='".$loginUrl."'>Link here</a>"; 

Hinweise zu überprüfen:

  1. prüfen Sie haben eine Test-App auf Facebook eingerichtet.
  2. Überprüfen Sie, ob die Domäne mit der Domäne übereinstimmt, die Sie verwenden.
  3. Überprüfen Sie die vollständige URL für die Umleitungsseite, die Sie verwenden werden, um die Antwort zu verarbeiten.
2

Das Skript ist nicht vollständig. Sie müssen den else-Teil schreiben, wenn die Sitzung nicht festgelegt ist. Antrag auf Genehmigung kommt hier zur Rolle.

else { 
    $helper = new FacebookRedirectLoginHelper('https://apps.facebook.com/yourappname/'); 
    $permissions = array(
     scope =>'publish_actions', 
       'email', 
       'user_location', 
       'user_birthday' 
    ); 

    // Get login URL 
    $auth_url = $helper->getLoginUrl($permissions); 
    //$auth_url = $helper->getLoginUrl(array('email')); 
    echo "<script>window.top.location.href='".$auth_url."'</script>"; 
0

I Problem wurde mit wenn

$loginUrl = $helper->getLoginUrl(); 

Die Lösung auszuführen versuchen, rufen sollte:

session_start(); 

vor dem

$helper = new FacebookRedirectLoginHelper($redirect_url); 

auf @ digitalvisual Antwort oben.

0
$helper = new FacebookRedirectLoginHelper('localhost/~{My Name}/{My Project}'); 

Verwendung wie:

$helper = new FacebookRedirectLoginHelper('http://example.com/help.php'); 

Muss vollständige URL verwenden.

Verwandte Themen