1

这可能是一个基本问题。而且我的英语也很差...

我有一个需要 Facebook 登录的网络服务。使用 JavaScript SDK,我可以获取用户的基本信息,例如用户 ID、姓名、性别。现在大约有10000个用户。

这一次,我需要访问用户的电子邮件地址。我知道我可以通过添加范围属性从新用户那里获取电子邮件地址。但是,对于现有用户,虽然我可以访问电子邮件地址,但我不知道如何显示授权对话框以获取访问电子邮件地址的权限。

任何想法?提前致谢!

4

1 回答 1

0

下面是我使用过的代码片段。基本上使用 /me/permissions 检查他们的权限并显示重新验证链接

<script>
    var FB_config = {
        API_ID: 123123123123,
        PERMISSIONS: "publish_stream,email",
    };

    jQuery(document).ready(function(){
        // initialise FB
        window.fbAsyncInit = function() {
            FB.init({
                appId      : FB_config.API_ID,
                status     : true, 
                cookie     : true,
                xfbml      : true,
                oauth      : true
            });
            FB.Event.subscribe('auth.statusChange', FBverifyLogin);
        };
    });

    function FBverifyLogin(response) {
        if (response.status === 'connected') {
            checkPermissions(); // check permissions if the user is logged in
        }
    }


    function checkPermissions(){
        jQuery("#FBreauth").hide();
        FB.api('/me/permissions', function(response) {
            var permissions = FB_config.PERMISSIONS.split(",");
            for(var i = 0; i < permissions.length; i++)
            {
                if(response.data[0][permissions[i]] == undefined || response.data[0][permissions[i]] != 1)
                {
                    // user does not have full permissions, show reauth link
                    jQuery("#FBreauth").show();
                    break;
                }
            }
        });
    }
    function FBreauth(){
        FB.ui(
            {
                method: 'oauth',
                display: 'popup',
                app_id: FB_config.API_ID,
                client_id: FB_config.API_ID,
                redirect_uri: "http://www.facebook.com/connect/login_success.html",
                scope: FB_config.PERMISSIONS
            }
        );
    }
</script>
<a href="#" onclick="FBreauth(); return false;" id="FBreauth">App permissions have changes. Please reauthorize this app</a>
于 2012-06-26T06:59:25.740 回答