我在前端使用facebook的javascript SDK:
jQuery("#pct_fbbutton").live("click",function(){
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
console.log('Conected');
FB.api('/me/likes', function(response) { user_likes = response;
FB.api('/me', function(response) { user = response;
send_server(user, user_likes);
});
});
} else if (response.status === 'not_authorized') {
console.log('not_authorized');
login();
} else {
console.log('not_logged_in');
login();
}
});
});
如您所见,用户登录facebook后,通过AJAX将两个对象发送到php脚本(使用函数 send_server )。
我可以在后端使用$ facebook-> getAccessToken()访问当前生成的令牌,但据我所知,这是从javasript sdk生成的cookie中恢复的,考虑到所有前端数据都可以被黑客攻击,使用token如何确保用户数据在php上有效?
答案 0 :(得分:0)
答案是使用PHP而不是JavaScript执行图形调用,特别是如果客户端脚本的唯一目的是将其发送到服务器;
假设您进行了正确的https证书检查,在服务器上进行数据收集是唯一可以确保数据未被篡改的实用方法。
访问令牌的有效性也很容易,因为如果提供的access_token值无效,Facebook将返回错误。
答案 1 :(得分:0)
在后端检索access_token后,尝试获取用户的个人资料。如果获取成功,那么客户端为您提供了正确的access_token,您应该保存它。类似下面的例子应该有用,但你可以找到更多的例子:
<?php
$facebook = new Facebook(array(
'appId' => $initMe["appId"],
'secret' => $initMe["appSecret"],
));
$facebook->setAccessToken($initMe["accessToken"]);
$user = $facebook->getUser();
if ($user) {
$user_profile = $facebook->api('/me');
print_r($user_profile);
}
?>