$ Facebook-> getSession()在Facebook页面iframe应用程序/选项卡只适用于应用程序管理员登录
问题描述:
我正在为Facebook业务页面开发一些自定义iframe/canvas页面(或现在称为“应用程序”)。出于我的目的,我想拉用户当前登录(并且当前喜欢页面)的姓和名,并将其输出到页面上。当我作为应用管理员登录时,该脚本工作得很好,但是当我尝试以我的个人帐户或几个我的朋友帐户登录时 - 看起来$ session是空的。为什么会发生这种情况,以及如何在不让用户通过任何其他身份验证的情况下获取姓氏和名字?
<?php
require_once '../db/connect.php';
require_once '../../lib/facebook.php';
$signed_request = $_REQUEST["signed_request"];
$secret = "***********************************";
$facebook = new Facebook(array(
'appId' => '**************',
'secret' => $secret,
'cookie' => true
));
$session = $facebook->getSession();
$me = null;
// Session based API call.
if ($session) {
echo "\$session is not null!";
try {
$uid = $facebook->getUser();
$me = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
}
}
echo $me['name'];
?>
答
不幸的是,这是不可能的(reference):
如同一个画布页面,你会不会 接收到所有用户的信息 访问你的应用程序在
signed_request
直到用户 授权您的应用程序。
所以你需要用户首先授权您的应用程序,这可以发现here:
<?php
$app_id = YOUR_APP_ID;
$canvas_page = YOUR_CANVAS_PAGE_URL;
$auth_url = "http://www.facebook.com/dialog/oauth?client_id="
. $app_id . "&redirect_uri=" . urlencode($canvas_page);
$signed_request = $_REQUEST["signed_request"];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
if (empty($data["user_id"])) {
echo("<script> top.location.href='" . $auth_url . "'</script>");
} else {
echo ("Welcome User: " . $data["user_id"]);
}
?>
授权您的应用程序并获得用户ID后,过程是微不足道的,我想。
任何想法如何做到这一点,而无需将用户重定向到另一个页面?也许是一个js弹出? – Yev 2011-03-17 19:34:06
@YevgeniyVanChuchin:当然,请查看[PHP-SDK示例]中的fb:login(https://github.com/facebook/php-sdk/blob/master/examples/example.php) – ifaour 2011-03-17 22:13:10