Facebook 自定义选项卡:我无法在子页面下获取 FacebookSession
Facebook Custom Tab: i can't get FacebookSession under subpages
我想在 facebook 选项卡下整合我的网站(不仅仅是一个特定的部分)并检索用户信息,我成功地完成了它。但问题是我在浏览网站页面时无法获取用户信息。
例如,如果我使用:
mysite.org/foo 作为主页面,在这里我可以毫无问题地获取所需的用户信息。
但是当我导航到 mysite.org/foo/bar 然后会话 return null.
\Facebook\FacebookSession::setDefaultApplication(APP_KEY, APP_SECRET);
$helper = new \Facebook\FacebookCanvasLoginHelper();
try {
$session = $helper->getSession();
} catch (\Facebook\FacebookRequestException $e) {
echo "Exception occured, code: ".$e->getCode();
echo " with message: ".$e->getMessage();
} catch (Exception $e) {
echo "Exception occured, code: ".$e->getCode();
echo " with message: ".$e->getMessage();
}
我正在使用 javascript sdk 进行日志记录
window.fbAsyncInit = function() {
FB.init({
appId : APP_KEY,
xfbml : true,
version : 'v2.1'
});
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
console.log('Logged in.');
}
else {
console.log('Logging.');
FB.login(function(response) {},{scope: 'email'});
}
});
};
提前致谢。
问题已解决:)
我必须用 post 请求替换站点中的所有链接,并在其中发送 'signed_request'。
这是可能需要改进的解决方案
<script type="text/javascript">
$(document).ready(function(){
var $form = $('<form name="temp" method="POST"/>');
$form.append('<input type="hidden" name="signed_request" value="<?=$_REQUEST['signed_request']; ?>" />');
$form.appendTo($('body'));
$('a').click(function(e){
var href = $(this).attr('href');
if(!isExternal(href)){
e.preventDefault();
$form.attr('action',href);
$form.submit();
}
});
function isExternal(url) {
var match = url.match(/^([^:\/?#]+:)?(?:\/\/([^\/?#]*))?([^?#]+)?(\?[^#]*)?(#.*)?/);
if (typeof match[1] === "string" && match[1].length > 0 && match[1].toLowerCase() !== location.protocol) return true;
if (typeof match[2] === "string" && match[2].length > 0 && match[2].replace(new RegExp(":("+{"http:":80,"https:":443}[location.protocol]+")?$"), "") !== location.host) return true;
return false;
}
});</script>
我想在 facebook 选项卡下整合我的网站(不仅仅是一个特定的部分)并检索用户信息,我成功地完成了它。但问题是我在浏览网站页面时无法获取用户信息。
例如,如果我使用: mysite.org/foo 作为主页面,在这里我可以毫无问题地获取所需的用户信息。 但是当我导航到 mysite.org/foo/bar 然后会话 return null.
\Facebook\FacebookSession::setDefaultApplication(APP_KEY, APP_SECRET);
$helper = new \Facebook\FacebookCanvasLoginHelper();
try {
$session = $helper->getSession();
} catch (\Facebook\FacebookRequestException $e) {
echo "Exception occured, code: ".$e->getCode();
echo " with message: ".$e->getMessage();
} catch (Exception $e) {
echo "Exception occured, code: ".$e->getCode();
echo " with message: ".$e->getMessage();
}
我正在使用 javascript sdk 进行日志记录
window.fbAsyncInit = function() {
FB.init({
appId : APP_KEY,
xfbml : true,
version : 'v2.1'
});
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
console.log('Logged in.');
}
else {
console.log('Logging.');
FB.login(function(response) {},{scope: 'email'});
}
});
};
提前致谢。
问题已解决:)
我必须用 post 请求替换站点中的所有链接,并在其中发送 'signed_request'。
这是可能需要改进的解决方案
<script type="text/javascript">
$(document).ready(function(){
var $form = $('<form name="temp" method="POST"/>');
$form.append('<input type="hidden" name="signed_request" value="<?=$_REQUEST['signed_request']; ?>" />');
$form.appendTo($('body'));
$('a').click(function(e){
var href = $(this).attr('href');
if(!isExternal(href)){
e.preventDefault();
$form.attr('action',href);
$form.submit();
}
});
function isExternal(url) {
var match = url.match(/^([^:\/?#]+:)?(?:\/\/([^\/?#]*))?([^?#]+)?(\?[^#]*)?(#.*)?/);
if (typeof match[1] === "string" && match[1].length > 0 && match[1].toLowerCase() !== location.protocol) return true;
if (typeof match[2] === "string" && match[2].length > 0 && match[2].replace(new RegExp(":("+{"http:":80,"https:":443}[location.protocol]+")?$"), "") !== location.host) return true;
return false;
}
});</script>