繁体   English   中英

持续使用Facebook页面标签登录

[英]Persisting Facebook page tab login

我正在尝试制作一个非常简单的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而不是超链接和回发?

仅在将初始加载到iframe时, signed_request参数才会发布到您的应用程序中-因此,您应该执行仅从那里获取信息的代码(然后再检查该参数是否存在),而不是在每个页面上。

(您可能会在随后的应用程序内页面上的$request得到null ,然后$user也将由代码设置为null 。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM