2014-05-03 171 views
5

我想讓Facebook登錄與他們的新的PHP SDK 4.0爲我的網站工作。我幾乎一字不差地遵循了他們的要求,甚至連測試頁也無法工作。當我嘗試登錄時,我重定向到格式的URL:Facebook的PHP SDK 4.0登錄

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= 

我已經填寫了相同的URL我的Facebook開發者頁面上已經,這是我想測試代碼:

<?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>'; 
} 

不幸的是,我從來沒有被重定向回去,甚至沒有加載登錄頁面。我在這裏做錯了什麼?

回答

0

這是您所使用的代碼?

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

您將從Facebook重定向,因此此處的參數需要是可從Internet訪問的URL。

4

您不必包含PHP文件。 Facebook希望你使用作曲家來管理需要的東西。

但是....他們給你一個解決方法:包括autoload.php,並保持他們給你最容易實現的文件結構。爲了方便,把所有的文件從SDK到一個名爲facebook文件夾,讓您擁有一個子文件夾中有名爲src和範圍內的另外一個叫Facebook

然後該SDK創建您的用戶可以點擊一個鏈接授權訪問您的應用程序。

如果您正在測試,你需要保持刪除從Facebook個人資料的應用程序每次獲得註冊窗口(Settings右上角的下拉,然後就留下作爲2014年8月的Apps),否則就會反彈直通到您指定的重定向頁面將顯示爲沒有任何工作。

// 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>"; 

注意檢查:

  1. 檢查您設置了Facebook上的測試應用程序。
  2. 檢查域名是否與您正在使用的域名相匹配。
  3. 檢查您將用於處理響應的重定向頁面的完整url。
2

腳本是不完整的。如果未設置會話,則必須在其中寫入else部分。此處請求獲得許可。

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

試圖執行

$loginUrl = $helper->getLoginUrl(); 

解決的辦法是打電話的時候,我是有問題的:

session_start(); 

$helper = new FacebookRedirectLoginHelper($redirect_url); 
上@ DigitalVisual的回答

以上。

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

使用像:

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

必須使用完整的URL。