2011-06-03 118 views
2

我使用這個代碼像回調的Facebook:Facebook的「Like」按鈕的回調幫助

  <script type="text/javascript"> 
       FB.Event.subscribe('edge.create', function(response) { 
        // php script to call via ajax 
       }); 
      </script> 

的問題是,如果我叫一個PHP腳本(例如http://www.test.com/addfacebook?id=xx&user=xxx&code=xxxx)有人可以看到我的JavaScript並運行此頁面甚至是垃圾郵件或使用它,而不必先優先使用它。

這個概念是我想給每個用戶喜歡的頁面一個獨特的特殊折扣代碼。因此,在回調中,我想存儲數據庫和ID,Facebook上的用戶真實姓名以及我爲他創建的折扣代碼。

如何做到這樣有人不能重寫它(因爲它是JavaScript)?

非常感謝!

+0

也許你可以使用[PHP SDK](https://github.com/facebook/php-sdk)? – netcoder 2011-06-03 17:42:16

回答

0

最簡單的方法就是驗證用戶是否合法。我會讓你的ajax動作具有包含FacebookID和access_token的參數。這將防止任何人玩你的系統。

由於您使用的是FB JS SDK - 只需打個電話給API,像這樣:

FB.getLoginStatus(function (loginResponse) { 
      FB.api('/me', function (graph) { 
       var token = loginResponse.session.access_token; 
       var fbid = loginResponse.session.uid; 
     } else { 
      // no user session available, someone you dont know 
     } 
    }); 

我把這個在您的FB.Event.subscribe和使用單詞和相應FBID瓦爾。

希望這會有所幫助!

+0

嘿,我試着你告訴我上面,但仍然想知道如何進入一個PHP頁面,獲取參數在我的JavaScript ...用戶可以看到這個PHP頁面,並可以繞過像輸入假參數。 – 2011-06-03 19:34:37

+0

那麼,在這種情況下,您必須確保令牌仍然有效。如果他們花時間通過合法的令牌,然後讓他們通過。 – 2011-06-04 15:24:30

0

您可以使用PHP SDK來驗證喬伊提到的道理,一旦你在服務器上使用像這樣的標記:

$facebook = new Facebook(); // Replace the line with the call that sets the app id and secret 
$user = $facebook->api('/me',array('access_token',$_GET['access_token'])); 

然後檢查$用戶價值