【问题标题】:Facebook Javascript API call returns error requiring appsecret_proof argument - but this is client sideFacebook Javascript API 调用返回需要 appsecret_proof 参数的错误 - 但这是客户端
【发布时间】:2015-02-06 11:57:30
【问题描述】:

我正在使用 Facebook 的 Javascript SDK,但它返回错误:

来自服务器的 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 应用程序设置中关闭“服务器 API 调用的应用程序秘密证明”,这可以正常工作,但出于安全原因,我希望启用它。

这不应该通过 javascript 调用失败 - 它是客户端 API 调用,而不是错误消息所描述的服务器 API 调用。

这是 Facebook 的错误,还是我在某处遗漏了什么?

【问题讨论】:

标签: javascript facebook facebook-graph-api facebook-javascript-sdk


【解决方案1】:

截至 2018 年 2 月,该问题(或非常相似的问题)似乎再次出现。有一个错误报告:

https://developers.facebook.com/bugs/1597942793626594/

也就是说,对于启用了 Require App Secret 的应用程序,似乎无法在不传递 appsecret_proof 的情况下从 Javascript 执行 API 调用 - 在撰写本文时。


其他说明:

摘自docs

启用此功能后,我们将只允许 API 调用包括 appsecret_proof 或由颁发令牌的同一设备制成 到。

但是,在应用程序设置>高级>安全>需要应用程序密码中描述如下:

只允许来自服务器的调用,并且需要应用密码或应用密码 所有 API 调用的证明。

相关错误报告:October 2016February 2015

相关 SO 帖子:API calls from the server require an appsecret_proof argument.

【讨论】:

  • 所以在 2019 年 7 月 18 日之后,当 2.09 达到其生命周期的尽头时,2.10 将被强制执行——这需要应用程序的秘密证明——JavaScript SDK 将毫无用处。在您链接的错误报告中,他们在一小时前刚刚说这是“按预期破坏”。我不知道 Facebook 目前在做什么,但一切似乎都在分崩离析。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
  • 2013-03-01
相关资源
最近更新 更多