django-facebookconnect扩展权限

时间:2010-09-06 14:25:53

标签: django facebook

我想为django-facebookconnect添加一些扩展权限,即“email”。查看代码后,我看到实际的连接是在javascript中管理的。所以,我认为像这样的东西可能会起作用

{% load facebook_tags %}
<script type="text/javascript">
    FB_RequireFeatures(["XFBML"], function() {
        FB.Facebook.init("{{ facebook_api_key }}", "{% url facebook_xd_receiver %}"{%extended_permissions%});
    });

    function facebookConnect(loginForm) {
        FB.Connect.requireSession();
        FB.Facebook.get_sessionState().waitUntilReady(function(){loginForm.submit();});
    }
    function pushToFacebookFeed(data){
        if(data['success']){
            var template_data = data['template_data'];
            var template_bundle_id = data['template_bundle_id'];
            feedTheFacebook(template_data,template_bundle_id,function(){});
        } else {
            alert(data['errors']);
        }
    }
    function pushToFacebookFeedAndRedirect(data){
        if(data['success']){
            var template_data = data['template_data'];
            var template_bundle_id = data['template_bundle_id'];
            feedTheFacebook(template_data,template_bundle_id,function(){window.location.href=template_data['url'];});
        } else {
            alert(data['errors']);
        }
    }
    function pushToFacebookFeedAndReload(data){
        if(data['success']){
            var template_data = data['template_data'];
            var template_bundle_id = data['template_bundle_id'];
            feedTheFacebook(template_data,template_bundle_id,function(){window.location.reload();});
        } else {
            alert(data['errors']);
        }
    }
    function feedTheFacebook(template_data,template_bundle_id,callback) {
        FB.Connect.showFeedDialog(
            template_bundle_id,
            template_data,
            null, null, null,
            FB.RequireConnect.promptConnect,
            callback
        );
    }
</script>

这是extended_permissions标记

@register.simple_tag
def extended_permissions():
    if hasattr(settings,'FACEBOOK_EXTENDED_PERMISSIONS'):
        return """, {permsToRequestOnConnect: "%s"}""" % ','.join(settings.FACEBOOK_EXTENDED_PERMISSIONS)
    return ''

理论上我认为上面的代码应该有效。实际上它确实有效,它只是打破了弹出窗口的功能。当用户接受来自应用程序的请求时,它们将被重定向(在弹出窗口内)到主页。在编辑之前,弹出窗口将关闭,主浏览器窗口将被重定向到/ facebook / setup。

任何建议都将不胜感激

1 个答案:

答案 0 :(得分:0)

我认为问题可能在这里:

FB.Facebook.init("{{ facebook_api_key }}", "{% url facebook_xd_receiver %}"{%extended_permissions%});

我敢打赌它应该是

FB.Facebook.init("{{ facebook_api_key }}", "{% url facebook_xd_receiver %}{%extended_permissions%}");

甚至可能

FB.Facebook.init("{{ facebook_api_key }}", "{% url facebook_xd_receiver %}?perms={%extended_permissions%}");

不确定,但我从来都不喜欢js api。如果您仍然遇到问题,请尝试我的Django oauth实现:https://github.com/dickeytk/django_facebook_oauth