0

在我的应用程序中,我让我的用户与 FB 连接并授予我的应用程序权限。

当他们单击“连接”按钮时,会显示 FB 弹出窗口,他们会获得“使用 facebook 登录”,然后他们需要获得 publish_stream、manage_pages、电子邮件的大权限。

我的代码遇到的问题是,如果他们删除了其中一项权限(如 manage_pages ) checkLoginStatus 仍然允许用户继续。

那么如何验证用户是否已授予请求的权限?

<div id="fb-root"></div>
<script src="//connect.facebook.net/en_US/all.js"></script>
<script type="text/javascript">
FB.init({
    appId: '<?=FB_APP_ID?>',
    status: true,
    cookie: true
});

FB.getLoginStatus(checkLoginStatus);

function authUser() {
    FB.login(checkLoginStatus, {scope:'publish_stream, manage_pages, email'});
}

function checkLoginStatus(response) {
    if(response && response.status == 'connected') {
        $('#connbut').hide();
        FB.api('/me', function(user) {
            if (user) {
                  $('#fbuser-name').text(user.name);
                  $('#fbuserpict').attr('src', 'https://graph.facebook.com/' + user.id + '/picture');
                  $('#fbname').val(user.name);
                  $('#fbpict').val('https://graph.facebook.com/' + user.id + '/picture');
            }
        });
    } else {
        // Display the login button
        $('#connbut').show();
    }
}
</script>
4

1 回答 1

1

我的代码遇到的问题是,如果他们删除了其中一项权限(如 manage_pages ) checkLoginStatus 仍然允许用户继续。

当然可以,因为FB.getLoginStatus没有说明权限——它只告诉你用户是否连接到你的应用程序。

那么如何验证用户是否已授予请求的权限?

您可以通过请求/me/permissions(甚至只是使用字段扩展请求特定权限)来询问用户当前授予您的应用程序的权限。

但是通过 JS 这样做的客户端似乎以某种方式被缓存 - 请求权限,看到有一个丢失,调用FB.login并再次询问,根据我的经验,很可能仍然显示与以前相同的权限,即使用户已经提供了额外的之间的权限。实时获取可靠信息的唯一方法似乎是在服务器端进行。

于 2012-12-01T23:51:46.173 回答