保持Facebook页面选项卡登录

时间:2015-08-06 17:51:33

标签: php facebook authentication

我正在尝试制作一个非常简单的Facebook页面标签应用程序。我只需要使用$pageTabHelper->isAdmin()来判断用户是否是页面管理员。

当用户第一次打开页面选项卡时返回正确的值,但每当他跟随应用程序中的超链接时,$accessToken将更改为null,用户不再是管理员,即使他返回原来的“index.php”页面。

这是一个显示问题的测试页。

<?php
require_once __DIR__ . '/../Application.php';

$app = new Application();

$facebook = $app->getFacebook();
$loginHelper = $facebook->getRedirectLoginHelper();

$pageTabHelper = $facebook->getPageTabHelper();

// Grab the signed request entity
$request = $pageTabHelper->getSignedRequest();

// Get the user ID if signed request exists
$user = $request ? $request->getUserId() : null;

if ( $user ) {
  try {

    // Get the access token
    $accessToken = $pageTabHelper->getAccessToken();
  } catch( Facebook\Exceptions\FacebookSDKException $e ) {

    // There was an error communicating with Graph
    echo $e->getMessage();
    exit;
  }
}

echo "<h1>isadmin</h1>";
echo var_dump($pageTabHelper->isAdmin());

echo '<a href="/index.php?test=test"> test link </a>';
?>

使用此登录代码将应用程序添加到用户允许的应用程序中。

if (!isset($accessToken)) {
  function isSSL()
  {
    return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443;
  }

  $callback = (isSSL() ? "https" : "http") . "://" . $_SERVER['HTTP_HOST'] . 'facebook_login.php';
  $loginUrl = $loginHelper->getLoginUrl($callback, ['public_profile']);

  echo '<a target="_blank" class="facebook_login" href="' . $loginUrl . '">Log in</a>';
}

我觉得我误解了Facebook身份验证的工作方式。为什么用户不能在不破坏其身份验证的情况下遵循“测试链接”超链接?

我必须将整个应用程序设为一个页面并使用ajax而不是超链接和回发吗?

1 个答案:

答案 0 :(得分:1)

只有在初始加载到iframe时才会将signed_request参数发布到您的应用程序 - 因此您应该执行仅尝试从中获取信息的代码(在您检查参数存在之后再执行),以及不在每一页上。

(您可能只是在后续的应用内页面null中获得$request,然后$user也会被您的代码设置为null。 )