Я использую приложение Facebook, чтобы создать своего рода платформу "социального обмена".
Версия веб-сайта использует Facebook API, Twitter OAuth и Instagram, а версия canvas использует только API Facebook.
Я знаю, что при использовании Canvas Facebook отправляет параметр signed_request
, который фактически распознает, что я использую версию Canvas, а не версию веб-сайта. Итак, это мой код входа:
login.php
$is_canvas=$SController->checkIsCanvas();
if(isset($_REQUEST['request_ids'])) {
$_SESSION['auth_request']=strip_tags($_GET['request_ids']);
}
socialclass.php
function checkIsCanvas() {
$helper = new FacebookCanvasLoginHelper();
try {
$session = $helper->getSession();
} catch (FacebookRequestException $ex) {
return $ex->getMessage();
} catch (\Exception $ex) {
return $ex->getMessage();
}
if ($session) {
$_SESSION['is_canvas']='true';
$accessToken=$session->getAccessToken();
$_SESSION['auth_tk_facebook']=$accessToken->__toString();
$request = new FacebookRequest(
$session,
'GET',
'/me?fields=id,name,first_name,last_name,birthday,email,age_range,location,gender'
);
$response = $request->execute();
$userProfile = $response->getGraphObject(GraphUser::className());
if(isset($userProfile)) {
$login=$this->checkFacebookLogin($userProfile);
if($login===false) {
return $userProfile;
} else {
header("Location:".getBASEURL());
}
} else {
return false;
}
} else {
return false;
}
}
Проблема в том, что когда я выхожу из холста, а затем повторно signed_request
систему, Facebook не отправил ни signed_request
параметра signed_request
, поэтому я не могу узнать, действительно ли я использую версию Canvas или веб-сайт. Чтобы временно решить эту проблему, я просто перезагружаю страницу, поэтому Facebook может сохранить еще один signed_request
, но это довольно раздражает.
Эта проблема возникает и при переходе с версии Canvas на версию веб-сайта без выхода из системы. Очевидно, is_canvas
сеанса is_canvas
не отменяется, поэтому версия website
выглядит как версия Canvas
.
Как я могу всегда проверять, находится ли я на холсте или на веб-сайте без перезагрузки после выхода из системы? Наверное, проблема должна быть легко решена, но я еще не понял, как это сделать.
Если у вас есть вопросы по поводу большего количества фрагментов кода или если я не был таким ясным, как я ожидаю (извините за мой английский тоже), не беспокойтесь о том, чтобы спросить :)
Спасибо, совет.
Подобный/родственный вопрос решается здесь: проверьте, находится ли сайт внутри iframe
Потому что canvas всегда вызывается в iframe. Пожалуйста, проверьте, помогает ли это.
signed_request
. Посмотрим, может ли это помочь, спасибо :)