人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Facebook PHP SDK でエラーコード2500、"OAuthException: An active access token must be used to query information about the current user"というエラーが発生します。

1度目の認証では成功するのですが、2度目認証を取り消して再度認証するなどの場合発生してしまいます。
$fb->api('/me');
と呼び出した場合に発生します。
どなたか教えていただけないでしょうか。

●質問者: たくや
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● standard_one
●100ポイント

状況がわかりにくいので確認しますが、一度目は動く(認証が通り、/meの情報が取得できている)のですね?
それと認証を取り消すというのはFacebookにログインしてアプリを削除しているということでいいですか?
一度目も二度目もSDKが生成するログインURLに飛ばしているんですよね?
また、一度目と二度目の間に友達を増やしたりはしていないですよね?
それと、一度目と二度目というのはどういう区切りですか?プログラムを2回実行するという意味でいいですか?プログラムの実行は1回で、その途中で認証を取り消している意味ではないですよね?

PHP-SDKはセッションにFacebookの情報を保存するはずなので、連携後にprint_r($_SESSION);でアクセストークンを見ることができますので一度目の連携後と二度目の連携後でそれぞれ確認してください。
また、二度目の連携前にセッションをunsetしてから二度目の連携を実行してセッション情報に何か変化がないか確認してください。


たくやさんのコメント
ただいまSESSIONを確認しましたところ、 fb_[アプリID]_code fb_[アプリID]_access_token fb_[アプリID]_user_id fb_[アプリID]_state の4つが付与されておりました。もう少し詳しく追ってみます。 テストのフローはこうなっています。 1.Google Chromeをシークレットモードで起動 2.Facebookからアプリの認証を削除 3.アプリより認証要求 4.APIでmeが取得できることを確認 5.Facebookからアプリの認証を削除 6.アプリより認証要求 7.APIでmeが取得できることを確認 以前はこのフローで通っていたのですが7の部分で躓いております。 よろしくお願いします。

standard_oneさんのコメント
5と6の間で fb_* をunsetしてみるテストもしてみてください、その際6で使うfacebookオブジェクトは6の直前でnewしなおしたものを使ってください(unsetするためのツールを作っておくと便利だと思います)

たくやさんのコメント
fb_*の値を全て消してみましたがどうも変わらないようです。 SESSIONを追ってみた結果ですが、getAccessToken()を呼び出すとSESSIONに値が格納されるようでした。 正常時の場合ですと、アプリに戻った時に fb_[アプリID]_code、fb_[アプリID]_access_tokenに長い文字列が格納されます。 失敗の時にはfb_[アプリID]_code、fb_[アプリID]_access_tokenには何も格納されずgetAccessToken()の値が「アプリID|アプリシークレット」という値がわたってきます。 どうぞよろしくお願いします。

standard_oneさんのコメント
躓いているのは7ではなく6だと思われるのですが、シークレットモードでない場合のシーケンスと挙動を調べてみたらどうでしょうか? コメントでテストフローの全シーケンスを書こうとすると行数的に厳しいから端折って書いておられるのであれば複数のコメントを使うなり、別ページで詳細(できればソースも)を説明してそこのURLを貼るなりした方が解決は早いと思います。 少なくとも上であげられているテストフローはざっくりしすぎで、これ以上は回答の付けようがありません。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ