0

ページタブとして使用しているFacebookアプリを作成しました。私はPHP SDKとJavascript SDKを使用しており、ダイアログを表示してからタブiframe内にページを表示するように認証して完全に設定しました。

サイトの他のページを非同期でロードしたいのですが、非同期でロードされたページのユーザー データ (名前など) にアクセスできません。認証と変数を ajax で読み込まれたページに渡すにはどうすればよいですか?

(編集)解決策:

PHP SDK は、ajax でロードされたページ間 (または任意の場所) で使用するセッションを自動的に作成します。データにアクセスするには、ajax をロードした各ページで認証ルーチンを呼び出すだけです (php インクルードを使用するのが最適です)。

シンプルな jquery ロードを使用してページを div にロードします。

$('div#page').load('your-page.php');

そして、これは私が各phpページで実行するルーチンです:

<?php
    //facebook application configuration
    $fbconfig['appid' ] = "YOUR APP ID";
    $fbconfig['secret'] = "YOUR APP SECRET";

    $fbconfig['baseUrl']    =   "SOURCE FILES BASE URL";
    $fbconfig['appBaseUrl'] =   "APP BASE URL";

    /* 
     * If user first time authenticated the application facebook
     * redirects user to baseUrl, so I checked if any code passed
     * then redirect him to the application url 
     */
    if (isset($_GET['code'])){
        header("Location: " . $fbconfig['appBaseUrl']);
        exit;
    }

    //
    if (isset($_GET['request_ids'])){
        //user comes from invitation
        //track them if you need
    }

    $user =   null; //facebook user uid
    try{
        include_once "facebook.php";
    }
    catch(Exception $o){
        echo '<pre>';
        print_r($o);
        echo '</pre>';
    }
    // Create our Application instance.
    $facebook = new Facebook(array(
      'appId'  => $fbconfig['appid'],
      'secret' => $fbconfig['secret'],
      'cookie' => true,
    ));

    //Facebook Authentication part
    $user = $facebook->getUser();
    // We may or may not have this data based 
    // on whether the user is logged in.
    // If we have a $user id here, it means we know 
    // the user is logged into
    // Facebook, but we don’t know if the access token is valid. An access
    // token is invalid if the user logged out of Facebook.

    $loginUrl = $facebook->getLoginUrl(
            array(
                'scope' => 'email,publish_stream,user_birthday,user_location,user_work_history,user_about_me,user_hometown'
            )
    );

    if ($user) {
      try {
        // Proceed knowing you have a logged in user who's authenticated.
        $user_profile = $facebook->api('/me');

      } catch (FacebookApiException $e) {
        //you should use error_log($e); instead of printing the info on browser
        d($e);  // d is a debug function defined at the end of this file
        $user = null;
      }
    }

    if (!$user) {
        echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
        exit;
    }

    //get user basic description
    $userInfo = $facebook->api("/$user");

    function d($d){
        echo '<pre>';
        print_r($d);
        echo '</pre>';
    }
?>
4

1 に答える 1

0

リクエストの方法によって異なりますが、 $_SESSION['userData'] = $facebook->api('/me'); のように、データを $_SESSION 変数に保存できます。すべてのページで呼び出します。

于 2013-04-09T20:57:37.663 に答える