2

JS SDK を使用する機能的な Facebook アプリケーションがあります。JS SDK を使用してユーザーの Facebook ID とアクセス トークンを取得できますが、問題なく動作しているようです。ただし、JSスクリプトは、サーバー側に関連する操作を行うために、JQuery AJAXを介してサーバー側のPHPコードを呼び出す必要があります...しかし、PHPコードでもユーザーのアクセストークンにアクセスする必要があります。PHP SDK の公式 Facebook ドキュメントで、次のように表示されました。

Facebook SDK for PHP は、Facebook SDK for Javascript と連携して、アプリのクライアント側とサーバー側の両方でシームレスなセッション管理を提供できます。

この機能を有効にするには、JS SDK を埋め込んで初期化するときに、FB.init() に渡されるオブジェクトのステータス パラメータと Cookie パラメータの両方を true に設定してください。

上記の正確な手順に従いましたが、Facebook PHP オブジェクトを初期化した後、PHP コードがユーザーの Facebook ID とアクセス トークンを取得できないようです。

何が恋しいですか?ドキュメントによると、ユーザーのアクセストークンはCookieを使用してPHP SDKに自動的に渡される必要があるため、わかりません。

他の方法で行う必要がありますか?

ありがとう!

4

3 に答える 3

0

Javascript SDK を使用して取得した場合access_token、最初のページの読み込み後 (ページのリロード時または ajax 呼び出し時) にのみ取得できることがわかります。

ただし、クロスドメイン通信で問題が発生する可能性があるため、SDK が (チャネル ファイルと同様に) 正しく設定されていることを確認してください。また、Cookie はほとんどの場合、なんらかのハックがなくても iframe でブロックされます。 (主に IE と Safari で)。

また、JS SDK がセットアップする Cookie は PHP SDK 関数を介して使用されますgetAccessTokenhttps://developers.facebook.com/docs/reference/php/facebook-getAccessToken/

于 2012-12-19T01:12:30.820 に答える
0

js-SDK から取得したアクセス トークンを ajax リクエストと共に PHP に渡し、それを PHP で使用することもできます。

<script>
  // This is called with the results from from FB.getLoginStatus().
  function statusChangeCallback(response) {
    console.log(response);

    if (response.status === 'connected') {
      // Logged into your app and Facebook.
     // testAPI();  
      var accessToken = response.authResponse.accessToken;
        console.log(accessToken);

       //ajax call to PHP **************************************************************
       //*******************************************************************************
       $.get("/ajaxpage.php?token="+accessToken+"&uid="+response.authResponse.userID,"",function(data){
           // on reply from the server
       });


    } else if (response.status === 'not_authorized') {
      // The person is logged into Facebook, but not your app.

    } else {
      // The person is not logged into Facebook.
    }
  }

  // This function is called when someone finishes with the Login
  // Button.  See the onlogin handler attached to it in the sample
  // code below.
  function checkLoginState() {
    FB.getLoginStatus(function(response) {
      statusChangeCallback(response);
    });
  }

  window.fbAsyncInit = function() {
    FB.init({
      appId: '..................',
      cookie: true, // enable cookies to allow the server to access the session
      xfbml: true, // parse social plugins on this page
      version: 'v2.2' // use version 2.2 
    });

  
    FB.getLoginStatus(function(response) {
      statusChangeCallback(response);
    });

  };

  // Load the SDK asynchronously
  (function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s);
    js.id = id;
    js.src = "//connect.facebook.net/en_US/sdk.js";
    fjs.parentNode.insertBefore(js, fjs);
  }(document, 'script', 'facebook-jssdk'));


 <fb:login-button scope="public_profile,email" onlogin="checkLoginState();">
 </fb:login-button>
于 2022-02-13T17:46:11.140 に答える