2015-09-02 39 views
0

我正在尋找一些非常類似於我的問題,但仍然在這裏的空間丟失。我沒有JS部分的問題。我做登錄並獲得我的令牌。現在我需要發送http請求到一個將在數據庫中執行查詢的php。我如何信任客戶請求?我想我必須在服務器端確認用戶。所以我採取了PHP SDK:Facebook登錄JavaScript與PHP確認

編輯:這是更新的代碼,它現在工作。 $ fbToken通過JavaScript獲得並通過Ajax請求傳遞給php。不使用FacebookSession然而,嬰兒的步驟...

$Login = ($_SESSION["Login"])? $_SESSION["Login"] : (object)array("ativo"=>FALSE, "metodo"=>"", "id"=>-1, "nome"=>"", "tipo"=>"", "publico"=>"", "nLogin"=>0, "captcha"=>"") ; 
// 
$fbPhpUser = FALSE; 
require $Amb->phpBib.'Facebook/autoload.php'; 
//use Facebook\FacebookSession; 
use Facebook\FacebookRequest; 
use Facebook\GraphUser; 
use Facebook\FacebookRequestException; 
//FacebookSession::setDefaultApplication('{myAppCode}', '{myAppSecret}'); 
$fb = new Facebook\Facebook([ 
    'app_id' => '{myAppCode}', 
    'app_secret' => '{myAppSecret}', 
    'default_graph_version' => 'v2.3', 
    ]); 
try { 
    // Returns a `Facebook\FacebookResponse` object 
    $response = $fb->get('/me?fields=id,name', $fbToken); 
    $fpPhpUser = $response->getGraphUser(); 
} catch(Facebook\Exceptions\FacebookResponseException $e) { 
    fim("fbGraph", 'Erro Facebook Graph: ' . $e->getMessage()); 
    exit; 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
    fim("fbSDK", 'Erro Facebook SDK: ' . $e->getMessage()); 
    exit; 
} 
if($fpPhpUser){ 
    $Login->ativo = true; 
    $Login->metodo = "fb"; 
    $_SESSION["Login"] = $Login; 
} 

的想法是得到確認的是,用戶登錄和Facebook已授權我的應用程序,所以「{訪問令牌}」將以郵遞HTTP發送請求客戶端瀏覽器與其餘數據(例如:在我的網站數據庫中修改用戶註冊表格)。 $ Login-> ativo == TRUE意味着我可以安全地執行數據庫查詢。 (用戶也可以通過我自己的網站登錄系統登錄,但我希望他可以通過Facebook進行集成) 不知道是否會工作,有點厭倦嘗試...這是正確的方法嗎?

+0

嗨古斯塔沃,你是什麼意思與「我怎樣才能在客戶端請求的信任呢?」。據我所知,訪問令牌應該是足夠的,如果你使用JS SDK,你應該做的唯一的事情是向後端存儲訪問令牌的ajax請求。然後,你可以使用PHP或任何你想查詢數據庫。我並沒有真正獲得「確認」部分,但我認爲你不需要這一點。 –

+0

我看到的問題是JavaScript代碼是開放的,所以我可以看到php腳本的文件名將執行查詢,就像由ajax請求調用的任何其他php腳本一樣。我可以發送一個僞造的令牌來存儲並執行我想要的查詢!我認爲唯一安全的方法是在執行查詢之前選擇該令牌並直接從服務器上用Facebook進行檢查。如果你知道另一種方式,請回答這個問題。 – Gustavo

回答

-1

您只需要JavaScript SDK即可完成此操作。您的授權,通過statusChangeCallback函數獲得:

if (response.status === 'connected') { 

    //Logged into FB and app... 

} else if (response.status === 'not_authorized') { 

    //Have NEVER logged into the app before.... you will see permissions page... 

} else { 

    //NOT logged into FB... so not sure if logged into app... 
} 

一旦你連接,通過通過AJAX訪問令牌服務器,做任何你想用它。

https://developers.facebook.com/docs/facebook-login/web#checklogin

+0

不要以爲你讀了我的問題:「我沒有JS部分的問題」。 – Gustavo

+0

顯然你不會說英語「你不需要PHP SDK」 – Bxx

+0

這取決於所需的安全級別。服務器如何知道Ajax發送的令牌是真實的?服務器需要一些比較基礎來決定客戶端是否真的是Facebook授權的用戶。我開始明白爲什麼如此多的服務器每天都被黑客攻擊...... – Gustavo