0

我在我的网站上使用 facebook 登录

window.fbAsyncInit = function() {

    // init the FB JS SDK
    FB.init({
      appId      : 'XXX', // App ID from the App Dashboard
      channelUrl : 'XXX/channel.php', // Channel File for x-domain communication
      cookie     : true, // set sessions cookies to allow your server to access the session?
      frictionlessRequests: true
    });

};

问题是,我每隔约 10-20 分钟就会在我的网站上登出。该网站比重新加载,我再次登录。我认为cookie会以某种方式被删除。

有没有办法让那个 cookie 存在更长时间?

我的登录看起来像这样:

FB.login(function(response) {}, {scope:'publish_actions'});

更新:

当用户第一次登录时,我的脚本的这一部分被调用:

// 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' => 'XXX',
                    'description' => 'XXX',
                    'picture'=> 'XXX',
                    'access_token' =>  $facebook->getAccessToken()
            );
            $facebook->api('/'.$facebook->getUser().'/feed', 'POST', $attachment);

            // sql
        }
        header('Location: http:/xxx');
    }
}

但我得到一个错误

致命错误:未捕获的 OAuthException:(#1) 创建在第 1254 行的 /facebook/base_facebook.php 中抛出的共享时发生错误

这是由$facebook->api('/'.$facebook->getUser().'/feed', 'POST', $attachment);

当我link从我的 -attribute中删除时$attachment,它可以工作。是链接属性被禁止还是什么?

4

1 回答 1

1

您应该考虑扩展 facebook 访问令牌

https://developers.facebook.com/docs/howtos/login/extending-tokens/

但是,这使用了应用程序机密,因此不应该用 javascript 来完成,而应该用服务器端语言来完成(可能通过将您的代码与 php-sdk 结合起来)

于 2013-04-12T14:33:35.667 回答