Erfordern erweiterte Berechtigungen in FBML pyfacebook App
-
19-09-2019 - |
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.
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):
# ...