我目前正在开发我的第一个 facebook 应用程序。我在将 setExtendedAccessToken() 函数与 FB.Event.subscribe('auth.login') 结合使用时遇到问题。
我的 js 代码如下所示:
window.fbAsyncInit = function() {
// init the FB JS SDK
FB.init({
appId : 'XXX', // App ID from the App Dashboard
channelUrl : 'http://domain.tld/app/channel.php', // Channel File for x-domain communication
frictionlessRequests: true,
cookie: true,
xfbml: true
});
FB.Event.subscribe('auth.login', function(response) {
$('#loginSpinner').show();
$('#loginFacebook').hide();
window.location = "http://domain.tld/app/?first_login";
});
};
该auth.login
事件应仅在用户首次登录时触发。这个 PHP 代码也应该只在第一次登录时触发:
// triggers on first login
if (isset($_GET['first_login'])) {
if ($me) {
$facebook->setExtendedAccessToken();
$friends = $facebook->api('/me/friends');
$friends = $friends['data'];
if (!empty($friends)) {
//sql
}
$permissions = $facebook->api("/me/permissions");
if( array_key_exists('publish_actions', $permissions['data'][0]) ) {
$attachment = array(
'message' => 'XXX',
'name' => 'XXX - App',
'link' => 'http://domain.tld/app/',
'description' => 'XXX',
'picture'=> 'http://domain.tld/app/img.jpg',
'access_token' => $facebook->getAccessToken()
);
$facebook->api('/me/feed', 'POST', $attachment);
//sql
}
}
header('Location: http://domain.tld/app/');
exit;
}
问题是一个无限循环,它总是会调用auth.login
,因为setExtendedAccessToken()
会破坏当前会话,facebook 会自动将用户登录到我的应用程序。
有没有办法auth.login
只触发一次?当我设置setExtendedAccessToken()
为评论时
// $facebook->setExtendedAccessToken();
我的网站只按原样重定向用户一次。但我需要为我的应用程序扩展登录。