2010-03-13 59 views
1

我试图让我的FBML画布页自动提示新的应用用户获得publish_stream的权限。在Facebook's documentation之后,我尝试使用requires_permissions参数来require_login。也就是说,我试图用pyfacebook require_login装饰这样的:在FBML pyfacebook应用中需要扩展权限

@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应用程序的权限。我是否错过了一些东西,或者有人可以提出解决方法吗?

谢谢。

回答

2

右键,pyfacebook还不支持required_permissionslogin,您也可以致电(或更确切地说,重定向到)手动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 

你可能有,因为它传递给get_ext_perm_url来调整的next价值,但这个原本应该是罚款(对我的作品)。使用示例:

@facebook.require_login() 
@facebook.require_add() 
@require_permissions('email', 'offline_access') 
def index(request): 
    # ... 
+1

工程就像一个魅力。伟大的解决方案admp。正如你所建议的,我必须调整下一个值。 fb.get_app_url()返回的URL是“None”,可能是因为fb.app_name未设置。我用next ='%s'%(FACEBOOK_APP_URL)并且定义了这个设置var我自己。 – jlpp 2010-03-14 03:51:49

+1

如果我没有记错,我必须在我的设置中定义'FACEBOOK_APP_NAME'才能使'get_app_url'工作。 – adomas 2010-03-14 09:20:37

+1

好的提示。再次感谢。 – jlpp 2010-03-15 13:14:27