2012-12-01 73 views
0

在我的应用程序中,我有我的用户使用FB连接并授予我的应用程序权限。验证用户使用FB.getLoginStatus授予请求的权限

当他们点击连接按钮时,FB弹出窗口被显示,他们得到 “用facebook登录”,然后他们需要对publish_stream,manage_pages和email的最高权限。

我的代码存在的问题是,如果他们删除其中一个权限(如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> 

回答

1

我与我的代码有问题,就是如果他们删除权限(如manage_pages)的一个checkLoginStatus仍然允许用户继续。

当然,它的确如此,因为FB.getLoginStatus对权限一无所知 - 它只会告诉您用户是否已连接到您的应用程序。

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

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

但这样通过JS客户端似乎不知何故缓存 - 请求的权限,看到有一人失踪,要求FB.login并再次询问会,从我的经验,最有可能仍表现出相同的权限之前,即使用户已在其间给予额外的权限。实时获得可靠信息的唯一方法似乎是在服务器端进行。