检查Facebook JS-API应用程序是否已获得权限

时间:2011-08-12 01:53:51

标签: facebook facebook-graph-api

我有一个小脚本,可以在用户通过Facebook登录并在墙上发布一些信息时解锁页面上的某些内容。

如果用户第二次访问该页面并重复该过程,我希望避免任何重复的帖子(垃圾邮件)。

有没有一种方法(在询问权限时)告诉他们是否已经给出,因此跳过了脚本的共享部分?

这是我的代码:

$('.preview a').click(function(e) {
                e.preventDefault();  
                FB.login(function(response) {
                    if (response.session) {
                        FB.api('/me/feed', 'post', {
                            message: 'Just unlocked the exclusive preview of...',
                            picture: 'http://website.com/share.png',
                            link: 'http://www.website.com',
                            name: 'Name goes here',
                            description: 'Description here'
                            },
                            function(response) {
                                if (!response || response.error) {
                                    alert(response.error);
                                } else {
                                    $('.preview').hide();
                                    $('.clip').show();
                                }
                            });
                        }
                },

                {perms:'read_stream,publish_stream'});
            });

2 个答案:

答案 0 :(得分:0)

我写了一篇关于这个here的教程,这是一个例子:

FB.api({ method: 'fql.query', query: 'SELECT read_stream,offline_access,publish_stream FROM permissions WHERE uid=me()' }, function(resp) {
    for(var key in resp[0]) {
        if(resp[0][key] === "1")
            console.log(key+' is granted')
        else
            console.log(key+' is not granted')
    }
});

本文中还有一个JS REST示例仅供参考。

答案 1 :(得分:0)

从2011年到2014年,很多事情发生了变化..

我做了这个解决方案来检查“user_friends”和“publish_actions”权限,如果不允许这两者,则强制用户“重新进行autenticate”。只有在给出所有权限时才会调用回调方法。

function login(cb,forceAuth) {
    FB.getLoginStatus(function (response) {
        if (response.status !== 'connected' || forceAuth==true){
            FB.login(function (response) {
                checkPermissions(cb,false);
            }, {scope: 'publish_actions,user_friends'});
        } else {
            checkPermissions(cb);
        }
    });
}

function checkPermissions(cb,forceAuth){
    FB.api(
        "/me/permissions",
        function (response) {
            if (response.data[0]['publish_actions']==undefined || response.data[0]['publish_actions']==0 ||
                response.data[0]['user_friends']==undefined || response.data[0]['user_friends']==0) {
                if (forceAuth!=false)
                    login(cb,true);
            } else {
                cb();
            }
        }
    );
}

使用方法:

login(function () {
    myLogedAndAllowedFunction();
});