0

我正在使用 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);
    }

...

4

2 回答 2

1

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 以 status: true 初始化,响应对象将被 SDK 缓存。对 FB.getLoginStatus 的后续调用将从此缓存响应返回数据。

如果第一个调用返回 Unknown -> 所有其他调用都将返回相同的值。您可以尝试没有“真实”吗?

更新#2:

要接收此调用的响应,您必须订阅auth.statusChange事件。此事件传递的响应对象与显式调用 FB.getLoginStatus 返回的响应对象相同。

您订阅了所有其他的,除了auth.statusChange

于 2012-04-08T09:01:00.197 回答
0

初始化:

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
            }
            
        }

于 2016-01-07T13:22:20.817 回答