Я использую приложение Facebook для создания своего рода «социальной сети» платформы.
Версия веб-сайта использует Facebook API, Twitter OAuth и Instagram, а версия Canvas использует только Facebook API.
Я знаю, что при использовании 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;
}
}
Проблема в том, что когда я выхожу с холста, а затем снова захожу, Facebook не отправлял signed_request
параметр, поэтому я не могу узнать, использую ли я версию Canvas или версию веб-сайта. Чтобы временно решить эту проблему, я просто перезагружаю страницу, чтобы Facebook мог сохранить другую signed_request
, но это довольно раздражает.
Эта проблема возникает также, когда я перехожу с версии Canvas на версию веб-сайта без выхода из системы. Очевидно, что is_canvas
переменная сеанса не сбрасывается, поэтому website
версия кажется равной Canvas
версия.
Как я всегда могу проверить, нахожусь ли я на холсте или на веб-сайте без перезагрузки после выхода из системы? Надеюсь, эту проблему легко решить, но я пока не понял, как это сделать.
Если у вас есть какие-либо вопросы о большем количестве фрагментов кода или если я не был так ясен, как я ожидал (извините за мой английский тоже), не беспокойтесь о том, чтобы спрашивать 🙂
Спасибо за совет.
Подобный / связанный Вопрос решается здесь: Проверьте, находится ли сайт внутри iframe
Потому что холст всегда вызывается в iframe. Пожалуйста, проверьте, помогает ли это.
Других решений пока нет …