2011-06-03 26 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'])); 

然后检查$用户价值