Facebook JS SDK 中的 Oauth 错误

Error with Oauth in Facebook JS SDK

我在尝试使用 Facebook API 执行高级登录流程时遇到了一个奇怪的问题,我的服务器上存储了长期有效的令牌 (https://developers.facebook.com/docs/facebook-login/access-tokens#long-via-code)

问题是这样的:在将生成的代码发送回我的客户端(在本例中为 JS 网络应用程序)后,我应该调用图形 API 来生成长期令牌。我的电话看起来像这样:

var requestUri = "/oauth/access_token?code=" + code + "&client_id=" + facebookAppId + "&redirect_uri=" + redirectUrl;
FB.api(requestUri, function(response) {
    console.log(response);
});

但是,在回调此 FB.api 请求后,我收到如下所示的响应:

{
    "error": {
        "message": "unknown error",
        "type": "http"
    }
}

控制台也出现JS错误:

Uncaught SyntaxError: Unexpected token :

所有这一切真正奇怪的是,如果我查看对 /oauth/access_token 调用的原始响应,我会看到带有 200 成功代码的预期响应

{
    "access_token": "...",
    "machine_id": "...",
    "expires_in": 5184000
}

我可以由此确定 JSON 响应未被我的浏览器正确读取(在本例中为 Chrome)。事实上,如果我将上面的原始响应粘贴到 Chrome Dev JS 控制台,它会给我同样的 JS 错误。但是,如果我将它分配给控制台中的变量,则没有问题。基本上,Facebook 的 JS SDK 似乎出了点问题,响应对象从未正确返回到回调函数。有没有人遇到过这样的事情?我似乎找不到这个问题的答案。

我暂时找到了解决方法。我很确定问题出在 Facebook JS SDK 的某个地方。为了解决这个问题,我使用 AJAX 对图 API 进行了原始调用,在本例中使用 AngularJS

$http.get("https://graph.facebook.com/oauth/access_token....)

这样,我就可以得到我需要的响应,而不必处理我无法得到的错误。

我也可以不使用 FB.api,因为我正在请求访问令牌并且不需要担心 JS SDK 为我管理它。

如果有人对最初的问题有任何其他解决方案,我会很高兴听到他们。我仍然希望尽可能使用 Facebook SDK。