我正在尝试让我的FBML画布页面自动提示新应用用户获得publish_stream的权限。在Facebook's documentation之后,我尝试将require_permissions参数用于require_login。也就是说,我尝试使用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应用has been discussed中请求扩展权限。 在FBML应用too中请求扩展权限。我的目标是在FBML应用程序中要求扩展权限。我错过了什么或者有人可以建议解决方法吗?
感谢。
答案 0 :(得分:2)
是的,pyfacebook
尚不支持required_permissions
的{{1}},但您可以手动调用(或者更确切地说,重定向到)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