1

単純な認証を引き出そうとすると、無限ループになります。

最も奇妙なことは、混合jsとPhp APIを使用すると機能することです。

    <?Php
//uses the PHP SDK.  Download from https://github.com/facebook/php-sdk
require 'src/facebook.php';


$facebook = new Facebook(array(
  'appId'  => '306597542762982',
  'secret' => '88XXXXXXf1',
));


if(!$facebook->getUser())
    header("location: ".$facebook->getLoginUrl ());

var_dump($facebook->getUser());

上記のコードでは、無限ループが発生します。しかし!ヘッダーのリダイレクトを削除し、ログイン プロセスにのみ js SDK を使用すると、機能します。

4

2 に答える 2

2

編集:わかりました、それは問題の解決策ではありません、申し訳ありません

私の知る限り、ヘッダーは設定されていますが、スクリプトは停止していません。別のヘッダー ( ではないLocation) を想像してみてください。その時点でスクリプトが停止した場合はまずいでしょう。したがって、次のことを試してください。

if(!$facebook->getUser()) {
    header("location: ".$facebook->getLoginUrl ());
    die();
}

HTH

于 2012-09-30T14:47:07.550 に答える
1

何もする前に、最新の SDK があることを確認してください。古い SDK を使用すると、この動作が見られます。コード内のコメントは、廃止されたバージョンを指しています。コメントにあるように、コードがhttps://github.com/facebook/facebook-php-sdkからのものであり、https://github.com/facebook/php-sdk からのものではないことを確認してください。

また、 github の Facebookの例で確認できるいくつかの手順をスキップしています。彼らと同じようにやってみてください。

$user = $facebook->getUser();
if ($user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}

その後

if (!$user) {
  $loginUrl = $facebook->getLoginUrl();
  header("Location: " . $loginUrl);
}

私はまだそれheaderがうまくいくとは確信していません.

echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
于 2012-09-30T14:47:15.337 に答える