Пользовательская вкладка Facebook: я не могу получить FacebookSession под вложенными страницами

Я хотел интегрировать свой веб-сайт (а не только отдельный раздел) на вкладке Facebook и получить информацию о пользователе, мне удалось это сделать. но проблема в том, что я не могу получить информацию о пользователе, когда перехожу на страницу сайта.

Например, если я использую:
mysite.org/foo в качестве основной страницы, здесь я могу получить необходимую информацию пользователя без каких-либо проблем.
но когда я перехожу на mysite.org/foo/bar, сессия возвращает ноль.

   \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'});
}
});
};

Заранее спасибо.

0

Решение

Задача решена 🙂

Я должен заменить все ссылки на сайте почтовым запросом и отправить подписанный запрос.

вот решение, которое может потребовать некоторых улучшений

<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>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]