[英]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.