我的应用未加载,我在以下两种情况下获得了错误:
a)清除缓存后我第一次访问我的应用程序&使用任何浏览器,或使用以前没有使用过的PC。
b)当用户A从应用程序(和Facebook)注销后,用户A尝试直接访问应用程序,从同一台PC和浏览器,而不清除缓存或cookie。
但是,当我按F5更新网页时,它正常工作。
这是我在日志文件中遇到的错误:
{"readyState":4,"responseText":"Invalid access token","status":200,"statusText":"OK"}
用户验证码
require_once(dirname(__DIR__).'/lib/common/AppInfo.php');
require_once(dirname(__DIR__).'/sdk/src/facebook.php');
require_once(dirname(__DIR__).'/lib/logic/UsersLogic.php');
require_once(dirname(__DIR__).'/lib/common/Log.php');
if (substr(AppInfo::getUrl(), 0, 8) != 'https://' && $_SERVER['REMOTE_ADDR'] != '127.0.0.1') {
header('Location: https://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
exit();
}
try {
$facebook = new Facebook(array(
'appId' => AppInfo::appID(),
'secret' => AppInfo::appSecret(),
));
$user_id = $facebook->getUser();
} catch (Exception $e) {
exit("Error getting facebook data");
}
if ($user_id) {
try {
$basic = $facebook->api('/me');
} catch (FacebookApiException $e) {
if (!$facebook->getUser()) {
exit("Invalid access token");
}
}
if($basic==null){
exit("Application not installed");
}
$user=UsersLogic::getUser($user_id);
if($user==null){
exit("User not registered in database");
}
}
else{
exit("No user logged");
}
任何想法为什么会发生?也许我应该强制要求新的用户访问令牌? (如何)
感谢
答案 0 :(得分:1)
这完全是预期的 - 在第一种情况下,没有cookie,不知道用户是谁,因此无法获得有效的访问令牌,并且在第二种情况下,从Facebook注销(或取消授权您的应用程序)将导致您必须使任何访问令牌失效。
但那个错误,就是来自客户端代码吧?
在这种情况下,您需要使用FB.getLoginStatus
或类似代码包装您正在使用的代码,这样您就不会运行它,除非您确实拥有所需的访问令牌。