我正在使用PHP成功验证用户,获取访问令牌等。但是,对于我应用程序的一部分,我正在使用Javascript来加载图像/朋友等。过去我对getLoginStatus没有问题,但现在它又回来了。
status: unknown
大约 80% 的时间。它似乎在 Firefox 中比其他浏览器工作得更好一些,但我仍然在那里发生它,所以我认为这只是一种侥幸。我能想到的唯一可能影响这一点的事情是在有人尝试使用 php 登录之前尝试注销以前的用户(但是我试图在没有它的情况下恢复文件并进行测试,但仍然不起作用,所以除非它以某种方式弄乱了我的持久数据我不知道):
$fb_key = 'fbsr_'.$facebookConfig['app_id'];
setcookie($fb_key, '', time()-3600);
$facebook->destroySession();
似乎在谷歌上找不到任何关于这个的东西,所以我真的不知道发生了什么。在这一点上,也许我只需要使用我通过 php 拥有的访问令牌通过 javascript api 进行查询(因为我仍然可以成功获得它)。我现在要研究一下,但与此同时,我想我会发布以防有人有任何想法!
这是我的JS代码:
window.fbAsyncInit = function() {
FB.init({
appId : pre_fbAppID, // App ID
channelUrl : pre_absURL + '/channel.html', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
doFacebookLogin();
//Facebook can notify us when the user logs in and logs out
FB.Event.subscribe('auth.login', function(response) {
// do something with response
});
FB.Event.subscribe('auth.logout', function(response) {
// do something with response
});
function doFacebookLogin(){
FB.getLoginStatus(function(response) {
checkLoginResponse(response);
}, true);
}
。
FB.getLoginStatus
the user is not logged into Facebook at this time and so we don't know if they've authenticated your application or not (unknown)
我认为您没有正确初始化您的 JS SDK 或在 FB.init 之前调用它。(同:此处)
你能发布关于FB.getLoginStatus的javascript块吗?
更新:为什么在FB.getLoginStatus中有"true"?
为了提高应用程序的性能,并非每次检查用户状态的调用都会导致对 Facebook 服务器的请求。在可能的情况下,将缓存响应。在当前浏览器会话中第一次调用FB.getLoginStatus,或者初始化JD SDK的状态为true时,响应对象将由SDK缓存。对FB.getLoginStatus的后续调用将从此缓存响应返回数据。
如果第一个调用返回 Unknown ->则所有其他调用将返回相同的调用。你能在没有"真实"的情况下尝试吗?
更新#2:
若要接收此调用的响应,必须订阅 auth.statusChange 事件。此事件传递的响应对象与显式调用 FB.getLoginStatus 返回的响应对象相同。
您订阅了除auth.statusChange
之外的所有其他订阅
初始化:
window.fbAsyncInit = function () {
FB.init({
appId: 'xxxxxxxxxxxxx',
cookie: true,
xfbml: true,
version: 'v2.2'
});
//FB.getLoginStatus(function (response) {
// statusChangeCallback(response);
//});
};
开始脸书登录:
function startFace() {
FB.getLoginStatus(function (response) {
statusChangeCallback(response);
});
}
通话状态:
function statusChangeCallback(response) {
if (response.status === 'connected') {
loginFacebook();
} else if (response.status === 'not_authorized') {
//some code
} else if (response.status === 'unknown') {
FB.login(function (response) {
statusChangeCallback(response);
});
} else {
//some code
}
}