私は Facebook アプリを作成しており、Facebook php SDK を使用して、サーバー側で認証できるようにしています。Facebook がアプリにリダイレクトする際の承認後、index.php に次のコードがあるため、これが機能していることがわかります...
require_once 'facebook.php';
$facebook = new Facebook(array(
'appId' => '111111111111111',
'secret' => '11111111111111111111111111111111',
'cookie' => true
));
// Get User ID
$user = $facebook->getUser();
...そして $user は null 以外を返します。ここまでは順調ですね!
クリックすると ajax を介してコンテンツをロードするリンクがアプリにあります。JS は次のとおりです。
$.post('my_content.php', {
action: 'render'
}, function(res){
if (res.html.length) {
$('.content').html(res.html);
}
},'json');
問題は、my_content.php スクリプトが、ユーザーがログインしてアプリを承認したという事実を失っているように見えることです。
ユーザーがログインしているかどうかを確認するために my_content.php スクリプトで実行するコードは、index.php と同じです。
require_once 'facebook.php';
$facebook = new Facebook(array(
'appId' => '111111111111111',
'secret' => '11111111111111111111111111111111',
'cookie' => true
));
// Get User ID
$user = $facebook->getUser();
今回$user = $facebook->getUser()
は null を返します。
AJAX 呼び出しで PHP スクリプトを実行するときに、ユーザーがログインして認証されているかどうかを確認する方法はありますか?
index.php スクリプトのセッション変数に何かを格納する必要がありますか?
編集
さらに読んだ後、JavaScript SDK を使用してアクセス トークンを取得し、それを my_content.php に渡す必要があるかどうか疑問に思います。それが正しい方法かどうか誰にもわかりますか?
編集2
私に問題を与えている行はそうではないことがわかりました$user = $facebook->getUser()
:
それはこれです
$user_profile = $facebook->api('/me');
この行は、「OAuthException: 現在のユーザーに関する情報を照会するには、アクティブなアクセス トークンを使用する必要があります」というエラーで失敗します。
奇妙なことに、私がこれを行うと
$access_token = $facebook->getAccessToken();
$user = $facebook->getUser();
echo $access_token;
echo $user;
私は実際にアクセス トークンとユーザー ID を持っているので、CBroe によって報告されたバグである可能性が高いようです。以下のコメントを確認してください。