如何使用Facebook JS SDK取消授权回调URL?

时间:2012-03-12 15:50:17

标签: authorization facebook-javascript-sdk

我一直在研究这个主题,但找不到Javascript SDK的任何内容。我找到了PHP和C#的例子,但我仍然不确定Javascript SDK。据我所知,您设置了一个包含JS SDK的页面,将其放入deauthorize回调URL并订阅该页面上的authResponseChange事件。

这是我能说的最好的,但我没有找到任何例子或确认这种方法是否有效。如果可以提供任何精彩的例子。

我在Javascript测试控制台上对此进行了测试:http://developers.facebook.com/tools/console/但该方法使用了旧的其他API的撤销授权。我们希望使用取消授权的回拨URL从用户帐户中删除Facebook关联。

4 个答案:

答案 0 :(得分:9)

您应该在服务器上处理它。取消授权回调作为表单POST发送到您的URL,其表单参数为signed_request,其中包含已签名的请求值。您需要使用应用程序密钥解析已签名的请求值,以获取删除应用程序的用户的用户ID。然后,您可以更新应用程序的数据库,或在用户删除应用程序时执行适当的操作。

由于需要使用您的app secret来解析/解密signed_request值,您不希望在javascript中执行此客户端。

答案 1 :(得分:1)

您必须在应用的设置中添加特定的网址,当用户取消对您的应用授权时,您会在该网址上收到POST请求。

在请求的正文中,您将拥有 signed_request 。 为了从signed_request获取有用的数据,您需要执行以下操作:

您可以使用加密来帮助解决这个问题。 https://www.npmjs.com/package/crypto

  const crypto = require('crypto');

  function parseRequest(signed_request, secret){
      signed_request = signed_request.split('.');
      var encoded_sig = signed_request[0];
      var payload = signed_request[1];


      var data = JSON.parse(new Buffer(payload, 'base64').toString());

      if (data.algorithm.toUpperCase() !== 'HMAC-SHA256')
        return null;

      var hmac = crypto.createHmac('sha256', secret);
      var encoded_payload = hmac.update(payload).digest('base64')
        .replace(/\//g, '_').replace(/\+/g, '-').replace(/={1,2}$/, '');

      if (encoded_sig !== encoded_payload)
        return null;

      return data;
  }

答案 2 :(得分:0)

对于那些没有获得变量 signed_request 的用户,您需要使用body-parser:

const bodyParser = require('body-parser');

router.post('/YOUR_CALLBACK_URL', bodyParser.urlencoded({ extended: true }), (req, res) => {
    const signed_request = req.body.signed_request;
    
    //verify data initially, something like:
    if((typeof signed_request !== 'string') || (signed_request.length < 3) || (!signed_request.includes('.'))) {
        return res.status(400).end();
    }

    //after that, use @Maysara answer to parse data:
    const data = parseRequest(signed_request, YOUR_FACEBOOK_CLIENT_SECRET);
    if(!data){
        return res.status(400).end();
    }
    //use data
});

不要忘记: npm install --save body-parser

答案 3 :(得分:-1)

为方便搜索“Facebook javascript de-authorize”的人发现这篇文章,Facebook的JavaScript SDK v2.1允许您取消对应用的授权。

https://developers.facebook.com/docs/graph-api/reference/v2.1/user/permissions#delete
特别是JavaScript SDK选项卡:

/* make the API call */
FB.api(
    "/me/friends",
    function (response) {
      if (response && !response.error) {
        /* handle the result */
      }
    }
);