【发布时间】:2012-03-12 16:04:02
【问题描述】:
我通过 javascript SDK 检索访问令牌并通过 windows.location 将其传递给服务器:
<script src='https://connect.facebook.net/en_US/all.js'></script>
<!-- Load javascript facebook connector -->
<script>
FB.init({
appId : '<?=$app_id;?>',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
</script>
<script type="text/javascript">
function getToken(){
FB.login(function(response) {
if (response.authResponse) {
var access_token = response.authResponse.accessToken;
window.location="<?=$_SERVER['PHP_SELF'];?>?accessToken="+access_token;
} else {
return false;
}
}, {scope:'user_likes,friends_likes'});
}
</script>
PHP 代码:
<?php
$app_id = 'MY_APP_ID';
$app_secret = 'MY_APP_SECRET';
$page_id= 'MY_PAGE_ID';
if(isset($_GET['accessToken'])){
// Run fql query
$fql_query_url = 'https://graph.facebook.com/'
. '/fql?q=SELECT+uid+FROM+page_fan+WHERE+page_id='.$page_id.'+AND+uid+IN+(SELECT+uid2+FROM+friend+WHERE+uid1=me())&'.$_GET['accessToken'];
echo $fql_query_url;
$fql_query_result = file_get_contents($fql_query_url);
$fql_query_obj = json_decode($fql_query_result, true);
//display results of fql query
foreach($fql_query_obj as $v1){
foreach($v1 as $v2){
$x++;
}
}
echo "You have ".$x." friends who 'like' us";
}
当我在浏览器中回显 $fql_query_url 并通过该 url 时,facebook graph api 会回答
{
"error": {
"message": "An access token is required to request this resource.",
"type": "OAuthException",
"code": 104
}
}
我做错了什么?我确实获得了访问令牌,但它似乎无效?
【问题讨论】:
-
尝试在developers.facebook.com/tools/lint linting 访问令牌,看看它在那里是否有效。
-
另外,不要将访问令牌作为 GET 参数传递;它可能会泄露到您包含内容的任何第三方网站,并且可能是一个巨大的安全漏洞
-
当我从它验证的 GET 参数中检查访问令牌时,包括正确的权限。但是 FQL 查询不返回值......当我使用相同的查询和通过图形 API 请求的访问令牌时,它正在工作。当应用程序运行时,我将通过 POST 传递访问令牌。我认为这样就足够安全了?
标签: facebook facebook-javascript-sdk facebook-php-sdk