0

私は現在、最初の Facebook アプリケーションを開発しています。FB.Event.subscribe('auth.login') と組み合わせた setExtendedAccessToken() 関数に問題があります。

私の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;
}

問題は、現在のセッションを破棄し、Facebook がユーザーをアプリに自動的にログインさせるauth.loginため、常に を呼び出す無限ループです。setExtendedAccessToken()

一度だけトリガーする方法はありauth.loginますか?setExtendedAccessToken()コメントに設定すると

// $facebook->setExtendedAccessToken();

私のサイトは、ユーザーを 1 回だけリダイレクトします。しかし、アプリの拡張ログインが必要です。

私の前の質問:私の WebApp (Facebook ログインを使用) は私をログアウトさせます

4

0 に答える 0