Javascript Facebook SDK:如何真正登出

Javascript Facebook SDK: how to really log out?

本文关键字:何真正 Facebook SDK Javascript      更新时间:2023-09-26

首先:我知道有很多关于同一主题的问题,但没有一个对我有用(我已经花了3天时间试图让这个工作)…

我正在制作一款包含一些FB功能(通过Javascript Facebook API)的Javascript手机游戏。我遇到了麻烦,而试图真的从Facebook注销登录与另一个用户:每次我注销,我希望调用登录功能,并提示FB登录对话框,我可以指定我的电子邮件和我的密码,但不是这样,Facebook 自动登录与最后一个用户,甚至没有问我任何东西…我使用CocoonJS作为移动平台和纯Javascript(没有jQuery):

登录功能:

CocoonJS.Social.Facebook.init({
    appId:<<MYAPPID>>,
    channelUrl: "channel.html"
});
var socialService = CocoonJS.Social.Facebook.getSocialInterface();
socialService.login(function(loggedIn, error) {
    if (error) {
        console.error("login error: " + error.message);
    }else if (loggedIn) {
        console.log("login suceeded");
        // Ask for extended permissions
        CocoonJS.Social.Facebook.requestAdditionalPermissions("publish", "publish_actions", 
            function(response) 
            {
                callback(response.error ? false : true);
            }
        );
        CocoonJS.Social.Facebook.getLoginStatus(function(response) {
            if (response.status === 'connected')
            {
                CocoonJS.Social.Facebook.api(
                    "/me",
                    function (response) {
                        if (response && !response.error) {
                            // Getting "me" returns the information of the "same" user!
                            console.log("User: "+response.first_name+" "+response.last_name);
                        }
                    }
                );
            }
        });
    }
});

注销功能:

CocoonJS.Social.Facebook.getLoginStatus(function(response) {
    if (response.status === 'connected')
    {
        CocoonJS.Social.Facebook.logout(function(response) {
            console.log("User logged out!");
        });
    }
});

控制台日志被抛出,所以用户似乎已经注销,但当我重新启动游戏时,出现一种"我正在做某事"的屏幕,不到一秒钟,注销的同一用户再次登录(甚至通过呼叫"我"抛出他们的个人信息)……我以为Facebook会问我想用哪个用户登录我的应用,但它没有…

我认为它与"会话"或"cookie"有关,但我不知道如何通过Javascript清除它们(而且,因为我使用CocoonJS作为"浏览器",我对它几乎没有控制)…任何想法?

提前感谢您的时间和精力!:)

CocoonJS使用原生iOS和Android Facebook sdk。SDK本身负责会话存储,CocoonJS中不使用cookie。

Facebook SDK有两种不同的方法来关闭会话:

  • close():关闭本地内存会话对象,但不清除持久令牌缓存。
  • closeAndClearTokenInformation():关闭内存会话,并清除与会话相关的任何持久缓存

CocoonJS.Social.Facebook。在Android和iOS上内部调用closeAndClearTokenInformation。它擦除所有缓存的令牌,因此下一次登录从头开始。

Facebook SDK使用Facebook应用程序来处理登录过程,如果它安装在设备上,否则它回退到基于webview的登录。问题可能是你正在安装Facebook应用程序的设备上进行测试,所以SDK能够从Facebook应用程序获得登录用户,而不需要再次请求。如果你从Facebook应用程序中退出,或者你在没有Facebook应用程序的设备上测试你的应用程序,Facebook将要求你输入用户名和密码。