需要 FBML pyfacebook 应用程序的扩展权限
-
19-09-2019 - |
题
我正在尝试让我的 FBML 画布页面自动提示新应用程序用户授予publish_stream 权限。下列的 Facebook 的文档 我尝试使用 require_login 的 required_permissions 参数。也就是说,我尝试使用 pyfacebook require_login 装饰器,如下所示:
@facebook.require_login(required_permissions='publish_stream')
如:
@decorator_from_middleware(FacebookMiddleware)
@facebook.require_login(required_permissions='publish_stream')
def canvas(request, template):
...
要求 基于 pyfacebook 的 Facebook iFrame 应用程序中的扩展权限 已讨论过. 要求 FBML 应用程序中的扩展权限 也. 。我的目标是 要求 FBML 应用程序中的扩展权限。我错过了什么或者有人可以建议解决方法吗?
谢谢。
解决方案
正确的, pyfacebook
尚不支持 required_permissions
为了 login
, ,但您可以调用(或者更确切地说,重定向到) authorize
手动。我刚刚出于我的目的编写了以下装饰器:
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
您可能需要调整以下值 next
因为它被传递到 get_ext_perm_url
, ,但这应该没问题(对我有用)。使用示例:
@facebook.require_login()
@facebook.require_add()
@require_permissions('email', 'offline_access')
def index(request):
# ...
不隶属于 StackOverflow