【问题标题】:Javascript Facebook SDK: how to really log out?Javascript Facebook SDK:如何真正注销?
【发布时间】:2014-06-11 09:44:56
【问题描述】:

首先:我知道有很多关于同一主题的问题,但没有一个对我有用(我已经花了 3 天的时间来解决这个问题)...

我正在开发一款包含一些 FB 功能的 Javascript 手机游戏(通过 Javascript Facebook API)。我在尝试真的从 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!");
        });
    }
});

控制台日志被抛出,所以看起来用户实际上已经退出了,但是当我重新启动游戏时,出现了不到一秒钟的“我正在做某事”的屏幕,并且与登录的用户相同out 再次登录(甚至通过调用“我”来抛出他们的个人信息)......我期待 Facebook 询问我想用哪个用户登录我的应用程序,但它没有......

我认为它与“会话”或“cookies”有关,但我不知道如何通过 Javascript 清除它们(而且,因为我使用 CocoonJS 作为“浏览器”,所以我几乎无法控制在它上面)......有什么想法吗?

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

【问题讨论】:

    标签: javascript facebook logging facebook-javascript-sdk cocoonjs


    【解决方案1】:

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

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

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

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

    如果 Facebook SDK 安装在设备上,它会使用 Facebook 应用程序来处理登录过程,否则它会回退到基于 webview 的登录。问题可能是您在安装了 Facebook 应用程序的设备上进行测试,因此 SDK 能够从 Facebook 应用程序获取登录用户,而无需再次请求。如果您从 Facebook 应用程序注销或在没有 Facebook 应用程序的设备上测试您的应用程序,Facebook 将要求输入用户名和密码。

    【讨论】:

      猜你喜欢
      • 2011-10-22
      • 1970-01-01
      • 2014-07-31
      • 2011-05-19
      • 2015-08-30
      • 2011-05-31
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多