1

试图退出简单的身份验证,给了我无尽的循环。

最奇怪的是,当使用 Mixed 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();
}

高温高压

于 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会起作用,所以您可能还想尝试使用 javascript 重定向:

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