FB Graph API:抓住所有共同的朋友 - (#200)您没有足够的权限来执行此操作

时间:2017-12-07 22:14:44

标签: javascript node.js facebook facebook-graph-api aws-lambda

我正在使用AWS Lambda来询问当前用户与其他用户之间的所有共同朋友:https://developers.facebook.com/docs/graph-api/reference/user-context/all_mutual_friends/

我查看了所有其他stackoverflow答案,并且无法真正找到一个足够接近并且已经按照他们的每个答案仍然得到这样的错误: Facebook Graph All Mutual Friends"Requires a valid user is specified ..." error when using getCount

我的代码在AWS中如下所示,请注意我已使用此node.js第三方sdk(https://github.com/node-facebook/facebook-node-sdk):

// Imports third-party fb graph api node.js sdk: https://github.com/node-facebook/facebook-node-sdk
const fbGraph = require('fb');

// Grabs app secret and app ID
const appSecret = process.env.APP_SECRET;
const appID = process.env.APP_ID;

// Uses user access token and grabs total count of all relevant mutual friends
exports.handler = (event, context, callback) => {
    // Grabs relevant details from request
    // const accessToken = event.accessToken;
    const friendUserID = event.friendUserID;

    fbGraph.api('oauth/access_token', {
        client_id: appID,
        client_secret: appSecret,
        grant_type: 'client_credentials'
    }, function (res) {
        if(!res || res.error) {
            console.log(!res ? 'error occurred' : res.error);
            return;
        }

        let access_token = res.access_token;

        // Sets options for fb graph api to work
        fbGraph.options({accessToken: access_token, appId: appID, appSecret: appSecret, timeout: 12000});

        // Sets up fields and query string for request
        const friendUserIDQueryString = '/' + friendUserID; 
        const fields = { 
            fields: 'context.fields(all_mutual_friends.limit(10))' 
        };

        // Sends api request to get all mutual friends
        fbGraph.api(friendUserIDQueryString, 'post', fields, function(response) {
            console.log(response);

            // Error handling
            if (response.error) {
                // Logs error
                context.done(null, { MutualFriendsTotalCountError: 'Error: not able to receive response' });

                // Returns error message
                return callback(new Error(`Mutual friends total count error: ${response.error}`));
            }

            // Logs successful operation
            context.done(null, { MutualFriendsTotalCountSuccess: `Success: grabbed total mutual friend count for ${friendUserID}`});

            // Returns total count of mutual friends between current and other user as integer
            return callback(null, { total_count: response.context.all_mutual_friends.summary.total_count });
        });
    });
}

但我的回答是:

{ error: 
   { message: '(#200) You do not have sufficient permissions to perform this action',
     type: 'OAuthException',
     code: 200,
     ...
}

我真的不明白,我在我的IOS应用程序上使用了我自己的访问令牌,我正在使用它,应用程序app令牌通过OAuth,以及我的应用程序中存在的其他用户ID那个特定于我的应用程序和其他推荐的解决方案无效。

1 个答案:

答案 0 :(得分:0)

好了,现在它可以工作了,我完全按照这个stackoverflow的例子: Facebook Graph All Mutual Friends

我不知道具体是什么区别,因为它看起来仍然类似于我以前的东西,但这是我当前的代码看起来像和工作:

// Imports third-party fb graph api node.js sdk: https://github.com/node-facebook/facebook-node-sdk
const fbGraph = require('fb');

// Grabs app secret and app ID
const appSecret = process.env.APP_SECRET;
const appID = process.env.APP_ID;

// Uses user access token and grabs total count of all relevant mutual friends
exports.handler = (event, context, callback) => {
    // Grabs relevant details from request
    const accessToken = event.accessToken;
    const friendUserID = event.friendUserID;


    // Sets options for fb graph api to work
    fbGraph.options({accessToken: accessToken, appId: appID, appSecret: appSecret, timeout: 12000});

    // Sends api request to get all mutual friends
    fbGraph.api('/' + friendUserID, { fields: 'context.fields(all_mutual_friends.limit(0))'}, function(response) {

        // Error handling
        if (!response || response.error) {
            // Logs error
            console.log('MutualFriendsTotalCountError: Error: not able to receive response');

            // Returns error message
            return callback(new Error(`Mutual friends total count error: ${response.error.message}`));
        }

        // Logs successful operation
        console.log(`Success: grabbed total mutual friend count for ${friendUserID}`);

        // Returns total count of mutual friends between current and other user as integer
        return callback(null, { total_count: response.context.all_mutual_friends.summary.total_count });
    });
}

顺便说一下,这会返回当前用户与AWS Lambda上其他用户之间使用共同朋友的app-using和非app的总数