0

我正在尝试通过 Ajax HTTP DELETE 请求删除权限,但我得到的响应不是图形 api 文档所说的我应该得到的。它说我应该得到一个布尔响应(“如果删除成功则为真,否则出错。”)。但相反,我得到了权限列表的整个对象:

var revokePermission = function(permName) {

    var revoke_perm_url = "https://graph.facebook.com/me/permissions" +
                          "?access_token=" + access_token + "&callback=?";

    $.ajax({
        type: "DELETE",
        dataType: "jsonp",
        url: revoke_perm_url,
        data: {'permission': permName},
        success: function(response){
            console.log(response);
        }
    });
}

revokePermission(permission_name);

这是我回来的:

data: Array[1]
    0: Object
        bookmarked: 1
        create_note: 1
        email: 1
        installed: 1
        photo_upload: 1
        publish_actions: 1
        publish_stream: 1
        read_stream: 1
        share_item: 1
        status_update: 1
        user_interests: 1
        user_likes: 1
        user_status: 1
        video_upload: 1

请注意,api 文档说:

您可以完全取消对应用程序的授权,或者通过分别向 PROFILE_ID/permissions 或 PROFILE_ID/permissions/PERMISSION_NAME 发出 HTTP DELETE 来代表用户撤销特定权限。此请求必须使用当前应用程序的值 user access_token 进行。

我理解这一切,所以当我向特定权限 url(即“/permissions/user_likes/”)或使用通过 ajax 数据参数发送的权限的基本权限 url 发出请求时,它们都只返回一个对象我当前的所有权限,以及我请求删除的权限保持不变。

但是,当我在 url 和正在发送的数据中设置权限时,它返回一个带有错误的对象:

Object
    error: Object
    code: 2500
    message: "Cannot specify permission in both the path and query parameter."
    type: "OAuthException"

有谁知道发生了什么?请注意,auth.revokeExtendedPermission 的 LEGACY REST 方法确实可以按 (http://developers.facebook.com/docs/reference/rest/auth.revokeExtendedPermission/) 工作。它返回一个布尔响应并删除相应的权限。

解决方案?

4

2 回答 2

3

完整的代码,经过测试,返回“真”:

var revokePermission = function(permName) {
    var revoke_perm_url = "https://graph.facebook.com/me/permissions";
    $.ajax({
        type: "POST",
        dataType: "jsonp",
        url: revoke_perm_url,
        data: {
           'access_token' : 'access_token_here',
           'permission': permName,
           'method' : 'delete'
        },
        success: function(response){
            alert(JSON.stringify(response, null, 4));
        }
    });
}
revokePermission("email");
于 2012-11-08T21:56:24.917 回答
0

“type: DELETE”真的可以发送 HTTP DELETE 请求吗?您得到的响应是对 GET 请求的响应/<USER>/permissions

您可以通过添加另一个参数“方法”来伪造删除请求,并delete在发出 GET 请求时将其设置为,即

data: {
'permission': permName
'method' : 'delete'
},
于 2012-11-08T21:05:40.467 回答