2

我认为这是因为 Facebook 刚刚对他们的登录过程进行了一些更改。

几天前,我的 air 应用程序正在使用facebook-actionscript-api中的 FacebookDesktop 类。今天我打开这个项目,发现 Facebook 登录屏幕与我开始构建应用程序时有些不同。在我输入我的用户 ID 和密码后,我授予应用程序访问我的公开个人资料、朋友列表和照片的权限。然后出现另一个屏幕,我授予该应用代表我向我的朋友发帖的权限。

然后窗口关闭,我得到“OAuthException 2500 必须使用活动访问令牌来查询有关当前用户的信息。”

当我通过浏览器登录 Facebook 时,我看到我的应用程序显示在“您的应用程序”下,但我无法通过我的应用程序登录并执行任何操作。

我在 OSX Lion 上使用带有 GraphAPI_Desktop_1_8_1.swc 的 Adob​​e Flash。

这是我的代码:

public function MyApp(){
     FacebookDesktop.init(APP_ID, onInit);
}
protected function onInit(result:Object, fail:Object):void {
    if (result) {
        trace("onInit, Logged In\n");
    } else {
        trace("onInit, Not Logged In\n");
        var permissions:Array = ["publish_stream", "user_photos"];
        FacebookDesktop.login(onLogin, permissions);            
    }
}
protected function onLogin(result:Object, fail:Object):void {
    if (result) { 
        trace("Logged In as:");
        trace(FacebookDesktop.getSession().user.name);
    } else {        
        trace("Login Failed");  
        trace('code: '+fail.error.code); //code: 2500
        trace('message: '+fail.error.message); //message: An active access token must be used to query information about the current user.
        trace('type: '+fail.error.type); //type: OAuthException
    }
}

当我使用 SDK 中提供的 FlashDesktopExample(当然是用我的应用程序 ID 修改)时,我得到了相同的结果。

任何帮助都会很棒!提前致谢!

4

4 回答 4

1

我也遇到了这个问题:成功 URL 没有任何参数。

Cadderly82 是正确的;这是安全导航的问题。关闭我的 Facebook 帐户的“安全浏览”选项可以解决问题,但我不想要求用户这样做。

我可以通过将所有 FacebookURLDefaults 值设置为使用“https://”来解决这个问题。

现在我在成功 URL 中获得了一个有效的用户访问令牌;无论我的 Facebook 帐户的安全浏览设置如何,我都会得到有效值。

于 2013-04-24T20:28:51.780 回答
0

我已经解决了问题: LoginWindow 类根据 uri 设置令牌。

这工作正常,直到 LOGIN_SUCCESS_URL ( http://www.facebook.com/connect/login_success.html) 和 LOGIN_SUCCESS_SECUREURL ( https://www.facebook.com/connect/login_success.html) 页面停止在 uri 中包含访问令牌。

因此,永远不会设置令牌。即使我的应用在我登录后显示在 Facebook 的“您的应用”部分下,但如果没有令牌,我的应用仍然无法执行任何操作。

我有两个解决方案:

最简单的方法是更改​​ com.facebook.graph.core.FacebookURLDefaults 中的 LOGIN_SUCCESS_URL 和/或 LOGIN_SUCCESS_SECUREURL 属性,如下所示。

从第 82 行开始:

public static var LOGIN_SUCCESS_URL:String = 'http://www.facebook.com/connect/login_success.html';
public static var LOGIN_SUCCESS_SECUREURL:String = 'https://www.facebook.com/connect/login_success.html';

改成:

public static var LOGIN_SUCCESS_URL:String = 'http://www.yourwebsite.com/';
public static var LOGIN_SUCCESS_SECUREURL:String = 'https://www.yoursecurewebsite.com/';

当然你会使用你自己的网站 - 而不是' http://www.yourwebsite.com/'。我尝试使用http://localhost/它,效果很好。

另一种解决方案是:

使用以下代码更改 com.facebook.graph.windows.LoginWindow。我已经对我的文件进行了一些更改,所以如果行号与 SDK 的新副本中的行号不同,请原谅我。

第 143 行附近:更改:

vars.redirect_uri = FacebookURLDefaults.LOGIN_SUCCESS_URL;

至:

vars.redirect_uri = 'http://localhost/';

在生产代码中,您可能希望使用自己的网站地址而不是localhost,但我使用 localhost 进行测试。

然后,在 handleLocationChange 函数中(应该在第 168 行左右)将其添加到 else if 语句中:

}else if (html.location.indexOf ('http://localhost/') == 0) {               
    loginCallback(getURLVariables(), null);
    userClosedWindow = false;
    html.stage.nativeWindow.close();
    html.removeEventListener(Event.LOCATION_CHANGE, handleLocationChange);
}

正如我之前所说,将 localhost 更改为您的网站地址。

我希望这有帮助!

于 2013-04-12T18:51:54.730 回答
0

对于随机用户,我遇到了同样的问题,我真的不知道这是否是 Facebook 的安全导航问题:

检查 Facebook 中的用户属性:安全设置 > 安全浏览 (www.facebook.com/settings?tab=security)

  • 对于具有“禁用”状态的用户,它可以正常工作。
  • 对于具有“迁移”状态的用户,它会给出错误。
  • 对于以前“启用”状态的用户,它工作正常。

当我尝试将用户置于“迁移”状态并更改为“禁用”时,它运行良好。然后,如果我将其设置为“启用”,则“迁移”状态消失并标记为“启用”,但错误仍然存​​在。所以我想这是问题所在,但不知道如何解决。

于 2013-04-17T18:17:48.190 回答
-1

一年内发生了很多变化,这就是我认为的答案,现在你需要一个令牌才能登录 FacebookDesktop.getSession().accessToken

public function MyApp(){FacebookDesktop.init(APP_ID, onInit, FacebookDesktop.getSession().accessToken); }
于 2015-01-24T20:14:19.233 回答