1

我正在尝试让我的 FBML 画布页面自动提示新的应用程序用户获得 publish_stream 的权限。按照Facebook 的文档,我尝试将 required_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 应用程序中请求扩展权限。 也在FBML 应用程序中请求扩展权限。我的目标是在 FBML 应用程序中要求扩展权限。我是否遗漏了什么或者任何人都可以提出解决方法?

谢谢。

4

1 回答 1

2

对,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):
   # ...
于 2010-03-14T00:17:13.280 回答