我正在使用FB.ui使用简单的应用程序Facebook标签进行授权:
FB.init({
appId : '<%= Facebook::APP_ID %>',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true, // parse XFBML
channelUrl : 'http://<%= request.host_with_port %>/channel.html', // Custom Channel URL
oauth : true //enables OAuth 2.0
});
FB.ui({
method: 'oauth'
},
function(response) {
// do some redirect stuff here
});
授权很顺利,但即使用户确认了应用程序,也没有设置相关的fbsr_xxxxx cookie。有没有办法强迫它?响应对象包含user_id,但我更愿意使用带有signed_request的标准流。
答案 0 :(得分:0)
我遇到了完全相同的问题。除了使用弹出新窗口的FB.login之外,似乎无法在不刷新页面的情况下获取访问令牌。
您可能想要做的是在FB.ui响应之后对另一个页面进行ajax调用以返回访问令牌:
FB.ui({
method: 'oauth'
},
function(response) {
if(response.session){
$.get('return_token.php', function(response){
var access_token = response;
alert(access_token);
})
}
});
return_token.php:
<?
$config = array(
'appId' => $app_id,
'secret' => $secret
);
$facebook = new Facebook($config);
try {$access_token = $facebook->getAccessToken();}catch(FacebookApiException $e) {
$result = $e->getResult();
echo json_encode($result);
}
echo $access_token;
?>