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

Facebook 正在验证用户是否已使用FB.getLoginStatus授予请求的权限,facebook,facebook-graph-api,facebook-javascript-sdk,Facebook,Facebook Graph Api,Facebook Javascript Sdk,在我的应用程序中,我让我的用户连接FB并授予我的应用程序权限 当他们点击连接按钮时,会显示FB弹出窗口,并获得 “使用facebook登录”,然后他们需要获得发布\u流、管理\u页面和电子邮件的权限 我的代码存在的问题是,如果他们删除了其中一个权限(如管理页面),checkLoginStatus仍然允许用户继续 那么,如何验证用户是否已授予请求的权限 <div id="fb-root"></div> <script src="//connect.facebook.n

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

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

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

FB.init({
appId:“”,
状态:正确,
曲奇:是的
});
FB.getLoginStatus(checkLoginStatus);
函数authUser(){
登录(checkLoginStatus,{范围:'publish_stream,manage_page,email'});
}
功能检查登录状态(响应){
if(response&&response.status==“已连接”){
$('#connbut').hide();
FB.api('/me',函数(用户){
如果(用户){
$('#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”);
}
});
}否则{
//显示登录按钮
$('#connbut').show();
}
}
我的代码存在的问题是,如果他们删除了其中一个权限(如管理页面),checkLoginStatus仍然允许用户继续

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

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

<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>
您可以通过请求
/me/permissions
(甚至可以使用字段扩展请求特定权限)来询问用户当前为您的应用程序授予的权限

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