我正在使用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
参数,所以我无法识别我是否实际使用了画布版或网站版。为了暂时解决这个问题,我只是重新加载页面,因此Facebook可以保存另一个signed_request
,但它非常烦人。
当我从Canvas版本转到网站版本而没有注销时,也会出现此问题。显然,is_canvas
会话变量未设置,因此website
版本看起来等于Canvas
版本。
如何在登出后无需重新加载即可检查画布或网站中是否有我?我希望这个问题应该很容易解决,但我还没有想出如何做到这一点。
如果您对更多代码有任何疑问,或者我没有像我期待的那样清楚(对不起我的英语),请不要担心要问:)
感谢您的建议。