Frage

Ich versuche, meine FBML Leinwand Seite automatisch aufgefordert neuen App-Benutzer um Erlaubnis publish_stream zu erhalten. Im Anschluss an Facebook-Dokumentation ich das required_permissions Argument require_login versucht mit. Das heißt, ich versuchte, die pyfacebook require_login Dekorateur wie folgt zu verwenden:

@facebook.require_login(required_permissions='publish_stream')

, wie in:

@decorator_from_middleware(FacebookMiddleware)
@facebook.require_login(required_permissions='publish_stream')
def canvas(request, template):
   ...

Anfordern erweiterten Berechtigungen in einem pyfacebook-basierten Facebook iFrame app wurde diskutiert . Anfordern erweiterten Berechtigungen in einer FBML App zu . Mein Ziel ist es, erfordert erweiterten Berechtigungen in einer FBML App. Bin ich etwas fehlt oder kann jemand eine Abhilfe vorschlagen?

Danke.

War es hilfreich?

Lösung

Richtig, pyfacebook noch nicht required_permissions für login unterstützen, aber Sie können anrufen (oder besser gesagt, Umleitung) authorize manuell. Ich habe gerade den folgenden Dekorateur für meine Zwecke geschrieben:

def require_permissions(*names):
    """Require extended permissions.
    XXX: in theory, the facebook.require_login() decorator should support
    this, but doesn't in pyfacebook yet."""
    def decorator(fn):
        required_perms = set(names)
        def wrapper(request, *args, **kwargs):
            fb = request.facebook
            perms = set() if fb.ext_perms is None \
                    else set(fb.ext_perms.split(','))
            if not required_perms.issubset(perms):
                missing = required_perms.difference(perms)
                url = fb.get_ext_perm_url(','.join(missing),
                            next='%s%s' % (fb.get_app_url(), request.path[1:]))
                print url
                return fb.redirect(url)
            return fn(request, *args, **kwargs)
        return wrapper
    return decorator

Sie müssen möglicherweise den Wert von next optimieren, wie es get_ext_perm_url geben wird, aber dies sollte sonst in Ordnung (Werke für mich) sein. Anwendungsbeispiel:

@facebook.require_login()
@facebook.require_add()
@require_permissions('email', 'offline_access')
def index(request):
   # ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top