使用FB.getLoginStatus验证用户是否已授予所请求的权限



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

当他们单击"连接"按钮时,FB弹出窗口将显示,他们将获得"使用facebook登录",然后他们需要获得发布流、管理页面和电子邮件的权限。

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

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

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

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

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

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

最新更新