PHP Facebook SDK に問題があります。同じ種類の問題 (アクセス トークンが無効、リダイレクト ループなど) について話している多くの投稿を読みましたが、どれも役に立ちませんでした。
簡単に言えば、私のプロジェクトの設計方法:
これは、Facebook にログインしているユーザーのみが実行することを意図した Facebook アプリケーションです。Yii フレームワークを使用して、ページが読み込まれるたびに呼び出されるフィルターを作成し、Facebook にログインしているユーザーだけがコンテンツを表示できるようにします。これは、Facebook のアプリケーション BranchOut とまったく同じように動作する必要があります。
私の問題とそれを再現する方法:
- Facebook からの一般的なログイン プロセス (OAuth、アクセス トークン) を使用して、アプリケーションにログオンします。
- Facebook ページで手動でログアウトし、アプリケーションで新しいアクションを実行しようとしています
- フィルターは、私が Facebook にログインしているかどうかをチェックします。ログインしていないため、Facebook のログイン ページにリダイレクトされます。
- Facebook に再度ログインすると、Facebook とアプリケーションのフィルターの間で典型的な無限ループが発生します。
これが私のフィルターのコードです:
$fb_logged = false;
try
{
$user = Yii::app()->facebook->getUser();
$me = Yii::app()->facebook->api('/me');
$fb_id = $me['id'];
$fb_logged = true;
}
catch (Exception $e)
{
$fb_logged = false;
}
if($fb_logged)
{
print_r($fb_id. ' has logged');
/* Check if user exists on MyApp
... */
}
// If user NOT logged on FB, send him to the FB login page
else
{
$loginUrl = Yii::app()->facebook->getLoginUrl(array(
'redirect_uri' => Yii::app()->getRequest()->getUrl() // I have tried many things here.
));
echo("<script> top.location.href='" . $loginUrl . "'</script>");
Yii::app()->end();
}
正確に何が起こっているかというと、FB にログインした後、同じ URL へのリクエストが行われるため、Filter が再度呼び出されます。その時点で、api('/me') を呼び出すと、有効なアクセス トークンが見つからないため、例外が生成され、ループが開始されます。
Facebook のアプリ設定に従って、すべての URL とドメイン名を確認しました。また、新しい特定の URL にリダイレクトするなど、多くのことを試しましたが、これがまだ同じユーザーであることを確認したい (または、ユーザーが変更された場合はその結果として行動したい) ため、フィルターも使用する必要があります。
機能する唯一の方法は、ユーザーをフィルターのないページにリダイレクトすることです (api("/me") への呼び出しは行われません)。次に、アプリケーション内の新しいリンクを手でクリックすると、アクセス トークンが見つかります。そして、これは私が望む動作ではありません。
誰かが私を助けてくれることを本当に願っています!
前もって感謝します。