django-facebookconnect расширенные разрешения - PullRequest
3 голосов
/ 06 сентября 2010

Я хочу добавить некоторые расширенные разрешения для django-facebookconnect, а именно «электронная почта». После просмотра кода я вижу, что фактическое соединение управляется в 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 голосов
/ 04 октября 2011

Я думаю, что проблема может быть здесь:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...