0

これは単純なコードです。単一のサイトで実行され、可能な限り単純です。

@ini_set('display_errors','On'); // enable or disable public display of errors (use 'On' or 'Off')
include_once('lib/facebook.php');

// Create our application instance
$config = array(
  'appId' => 'xx',
  'secret' => 'yyy'
);
$link = 'http://someurl.com';
$facebook = new Facebook($config);

// Get User ID
$user = $facebook->getUser();

if($user){ ?>
    <p>logged in</p>
<?php } else {
    $loginUrl = $facebook->getLoginUrl(array(
    'scope'         => 'manage_pages,email',
    'redirect_uri'  => $link,
    ));
    echo '<a href="'.$loginUrl.'">Login with FB</a>'; 
}

したがって、idが何をするか、ユーザーがログインしていないとき(または具体的に-getUser()が何も受信しない場合)にログインへのリンクを表示し、getUserが与えるべきものを与える場合はテキスト付きの段落を表示します(通常、ユーザーはそこにリダイレクトを配置することを好みます) 、getUser が 0 を返した場合、以下で説明する無限ループに入ります)

簡単なテストで問題が表示されます。ユーザー許可が与えられている場合でも、サイト URL でアクセスすると、段落ではなくログイン URL が表示されます。

問題はどこだ?それを理解しようとしている間、私はサイトのURLを「Facebookのアプリ」として追加したので、Facebook内からアクセスできます。そして eureka、この方法で (キャンバス ページの URL から) アクセスすると、getUser() は正しく機能します。さらに、Canvas Page の URL リンクからアクセスした後、サイトに直接アクセスすると、getUser() も正しく機能します。

それで、キャッチはどこですか?ブラウザのシークレット機能を試してみると、ユーザーのブラウザに何かが保存されていることがわかりました。ユーザーが既にキャンバス ページの URL にアクセスしているブラウザから直接サイトにアクセスすると、正しい応答が表示されますが、ユーザーがキャンバス ページの URL にアクセスしていないブラウザでは、ログイン URL が表示されます。

そのため、問題はブラウザのキャッシュに何らかの形で関連しており、キャンバスページ自体ではなくページを介してアクセスしたときにFacebookが正しい方法を設定していないことがわかります。

また、アプリへのアクセスが与えられると、ユーザーがログイン リンクをクリックすると、_GET パラメーターとして状態とコードを使用して元のページに自動的にリダイレクトされるため、コードで自動リダイレクトを配置すると、状態とコード値が異なる無限ループが発生します。リダイレクトが発生するたびにリンクします。

PHP SDKのみで動作するこの問題を修正する方法を知っている人はいますか?

4

0 に答える 0