我正在使用Facebook的Javascript,但它正在返回错误:
来自服务器的API调用需要一个appsecret_proof参数。
我很熟悉为什么它会通过PHP返回这个错误服务器端,但是这是客户端javascript,并且不知道为什么它会返回这个错误。
精简代码如下:
window.fbAsyncInit = function () {
FB.init({
appId: [my app id],
xfbml: true,
version: 'v2.2'
});
};
(function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {
return;
}
js = d.createElement(s);
js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
FB.login(function (res) {
if (res.authResponse) {
if (res.authResponse.grantedScopes.indexOf("manage_pages") >= 0) {
FB.api('/me/accounts', function (res) {
if (res && !res.error) {
/*
* Should show pages available for
* the facebook user to manage ...
* (code removed)
*/
}
else {
/*
* Instead, shows 'API calls from the
* server require an appsecret_proof
* argument" error here
*/
console.log("Error /me/accounts: " + JSON.stringify(res.error));
}
});
}
}
});
如果我在Facebook设置中关闭了“调用”,这很好,但出于安全原因,我希望这样做。
这不应该通过javascript调用失败--它是客户端API调用,而不是错误消息描述的服务器API调用。
这是Facebook上的一个bug,还是我在某个地方遗漏的东西?
发布于 2018-03-07 20:25:45
截至2018年2月,这个问题(或类似的问题)似乎再次出现。这里有一个bug报告:
https://developers.facebook.com/bugs/1597942793626594/
也就是说,对于启用了Require 的应用程序来说,在编写appsecret_proof
时,似乎无法从appsecret_proof
中执行appsecret_proof
调用。
其他注释:
文档摘录
当启用该功能时,我们将只允许包含appsecret_proof或来自发出令牌的同一设备的API调用。
但是,在应用程序设置>高级>安全性>要求应用程序秘密中,描述如下:
只允许从服务器调用,并要求应用程序机密或应用程序的秘密证明所有API调用。
相关帖子:证明论证。
https://stackoverflow.com/questions/28365287
复制相似问题