尝试使用存储在我的服务器上的长期令牌的Facebook API进行高级登录流程时遇到了一个奇怪的问题(https://developers.facebook.com/docs/facebook-login/access-tokens#long-via-code)
问题在于:在将生成的代码发送回我的客户端(在这种情况下是一个JS Web应用程序)时,我应该调用图API来生成一个长期存在的令牌。我的电话看起来像这样:
<asp:Label ID="lblDoseStrength" runat="server" Text='<%# If(IsDbNull(Eval("Value.DoseStrength1")), " ", Eval("Value.DoseStrength1")) + " " + If(IsDbNull(Eval("Value.DoseUnit1")), " ", Eval("Value.DoseUnit1")) + " " + If(IsDbNull(Eval("Value.DoseForm1")), " ", Eval("Value.DoseForm1")) + " " + If(IsDbNull(Eval("Value.DoseMult1")), " ", Eval("Value.DoseMult1")) %>'></asp:Label>
但是,在回调此FB.api请求时,我得到的响应如下所示:
var requestUri = "/oauth/access_token?code=" + code + "&client_id=" + facebookAppId + "&redirect_uri=" + redirectUrl;
FB.api(requestUri, function(response) {
console.log(response);
});
控制台中还有一个JS错误:
{
"error": {
"message": "unknown error",
"type": "http"
}
}
所有这一切真正奇怪的是,如果我查看对/ oauth / access_token的调用的原始响应,我会看到200个成功代码的预期响应
Uncaught SyntaxError: Unexpected token :
我可以从中确定我的浏览器无法正确读取JSON响应(在本例中为Chrome)。事实上,如果我将上面的原始响应粘贴到Chrome Dev JS Console中,它会给我带来相同的JS错误。但是,如果我将它分配给控制台中的变量,则没有问题。在Facebook的JS SDK中似乎出现了问题,并且响应对象永远不会正确地返回到回调函数。以前有人遇到过这样的事吗?我似乎无法找到答案。
答案 0 :(得分:2)
我确实暂时找到了解决方法。我很确定问题源于Facebook JS SDK中的某个地方。为了解决这个问题,我使用AJAX对图API进行了原始调用,在本例中使用AngularJS
$http.get("https://graph.facebook.com/oauth/access_token....)
这样,我可以得到我需要的响应,而不必处理我无法解决的错误。
我也可以不使用FB.api,因为我正在申请访问令牌,并且不必担心JS SDK会为我管理它。
如果有人对最初的问题有任何其他解决方案,我会很高兴听到他们。我仍然希望尽可能使用Facebook SDK。