在对用户进行身份验证后,我应该如何将用户重定向回我的页面标签?由于我的应用程序将存在于多个页面上,因此无法将一个特定的URL放入重定向。所以我需要抓住页面的id并将其放入url中。我试过使用会话变量,但它似乎对我不起作用。 :(这是我代码的一部分......
$signed_request = $facebook->getSignedRequest();
$_SESSION['TrueID'] = $signed_request['page']['id'];
$fbconfig['appBaseUrl'] = "http://www.facebook.com/pages/".$_SESSION['TrueID']."/".$_SESSION['TrueID']."?sk=app_241321439259320";
/*
* If user first time authenticated the application facebook
* redirects user to baseUrl, so I checked if any code passed
* then redirect him to the application url
* -mahmud
*/
if (isset($_GET['code'])){
header("Location: " . $fbconfig['appBaseUrl']);
exit;
}
//~~
//
if (isset($_GET['request_ids'])){
//user comes from invitation
//track them if you need
}
正如你所看到的,我正在设置一个会话变量以获取页面的id ..但这对我不起作用:(当我访问我的页面时,变量echo很好...但我猜它的在认证过程中迷路了。
答案 0 :(得分:3)
因此,当页面添加/安装您的应用时,您应该将页面link
与页面的id
一起存储。
现在,当您的页面标签被加载时,Facebook将发送包含页面page
的{{1}}参数(以及其他信息,请参阅documentation)。您检索该ID,从您的数据库中获取页面的链接并构建您的页面选项卡链接,这类似于(id
是页面的数据库记录):
$page
由于您使用的是PHP-SDK,因此您可以按照以下方式构建登录:
$redirect_uri = $page['page_link'] . '?sk=app_' . $APP_ID
当然,您可能不想直接重定向到登录,而是拥有号召性用语链接:
$user = $facebook->getUser();
if(!$user) {
$url = $facebook->getLoginUrl(array('redirect_uri' => $redirect_uri, 'scope' => 'read_stream'));
echo "<script>top.location.href = '$url';</script>";
exit;
}
答案 1 :(得分:2)
我发现的最佳方式是将应用设置中的网站网址设置为http://www.facebook.com/pages/
然后做这样的事情(测试):
$uid = '';
$facebook = new Facebook(array(
'appId' =>'xxxxxxxxxxxxxxx',
'secret' =>'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'cookie' => true,
'oauth' => true,
));
$uid = $facebook->getUser();
$signedrequest = $facebook->getSignedRequest();
$page_id = $signedrequest["page"]["id"];
$fb_access_token = $signedrequest["oauth_token"];
if($uid==''){
echo '<div id="authenticate"><a href="https://www.facebook.com/dialog/oauth/?client_id=APP_CLIENT_ID_HERE&redirect_uri=http://www.facebook.com/pages/'. $page_id .'/'.$page_id.'%3Fsk%3Dapp_APP_CLIENT_ID_HERE&response_type=token" target="_top">Authorize App</a></div>';
这可能有点像黑客,但它适用于我的情况:)希望它可以帮助别人!