【问题标题】:As3 Graph API LogoutAs3 图形 API 注销
【发布时间】:2011-06-17 05:12:55
【问题描述】:

我正在开发一个由不同用户玩的应用程序,但我使用 as3 graph api 来验证用户并在他们的墙上发帖,我需要在下一个用户开始他的会话之前注销每个用户在 as3 图形 api 上: http://code.google.com/p/facebook-actionscript-api/

我搜索强制 FB 询问登录信息,但在再次登录时注销后,API 跳过该步骤并在最后一个用户会话中登录。

【问题讨论】:

    标签: apache-flex facebook air logout


    【解决方案1】:

    我在网上看到的所有解决方案都不适合我。问题确实是 StageWebView facebook cookie 在使用 FacebookMobile.logout() 调用注销时没有被清除。使用访问令牌加载 logout.php 可能对我没有帮助,因为空中应用程序没有有意义的“下一个”参数值。我看到有人建议在那里使用 localhost 或 facebook.com,但这些选项都不起作用。

    我提出了一个非常有问题的解决方案,但它现在有效。 关键是通常在 facebook 中注销用户,就像他自己注销一样。为此,我们需要在 StageWebView 中加载 facebook.com 并单击注销。注销按钮是“logout_form” html 表单的提交表单项。所以我们需要进行一个javascript调用

    document.getElementById('logout_form').submit();
    

    在我们的 StageWebView 中。我们可以通过调用

    来做到这一点
    webView.loadURL("javascript:document.getElementById('logout_form').submit();");
    

    在 ActionScript 中。

    我现在使用的完整代码

    protected var _logoutAttemptInProgress:Boolean = false;
    public function fbLogout():void{
    if(!_isLoggedIn) return;
    if(_logoutAttemptInProgress) return;
    _logoutAttemptInProgress = true;
    
    var webView:StageWebView = new StageWebView();
    webView.viewPort = new Rectangle(-1, 0, 1, 1);          
    webView.stage = this.stage;         
    webView.loadURL("http://www.facebook.com/lksmlrsgnlskn");
    webView.addEventListener(Event.COMPLETE, runLogoutJs);
    
    function runLogoutJs(event:Event):void{
        webView.removeEventListener(Event.COMPLETE, runLogoutJs);
        var jsString:String = "document.getElementById('logout_form').submit();";
        webView.loadURL("javascript:"+jsString);
        webView.addEventListener(Event.COMPLETE, closeWebView);
    }
    
    function closeWebView(event:Event):void{
        webView.removeEventListener(Event.COMPLETE, closeWebView);
        webView.stage = null;
        webView.dispose();
    
        _isLoggedIn = false;
        _logoutAttemptInProgress = false;
    }
    
    FacebookDesktop.logout(null, APP_ORIGIN);
    }
    

    “lksmlrsgnlskn”只是一些随机垃圾,用于访问比主页面小得多且加载速度更快的错误页面。

    FacebookDesktop.logout 用于清除 Facebook lib 可能仍拥有的任何本地 SharedObject 数据。

    【讨论】:

      【解决方案2】:

      这是 FacebookMobile、Facebook 和 FacebookDesktop 不断修订的问题。基本上,您需要确保设置 FacebookDesktop.manageSession = false;并传入“注销”您网站的 api url 的第二个参数。 If that doesn't work, the other method is to use "reallyLogout", as detailed here in this thread.

      注释 #24 中的注释详细说明了从 FacebooMobile(或您使用的任何单例)公开访问令牌的方法,然后使用访问令牌在 Facebook 上手动调用 logout.php 方法。

      http://code.google.com/p/facebook-actionscript-api/issues/detail?id=297#c24

      【讨论】:

        【解决方案3】:

        这是 cookie 的问题,我的意思是,第一个用户会话仍然存在,当您按下登录 API 时,第一个用户会登录。

        我不知道为什么,但 Facebook Api 注销方法不会将用户从 facebook 注销,只会将用户从您的应用程序中注销。

        如果您找到了解决方案或有其他想法,请告诉我,以便我们找到解决方案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-29
          • 1970-01-01
          • 1970-01-01
          • 2013-09-27
          相关资源
          最近更新 更多