문제

FBML 캔버스 페이지를 가져 오려고 노력하고 있습니다. 수행원 Facebook의 문서 Question_Permissions 인수를 요구하기 위해 _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 앱에서 확장 된 권한. 내가 뭔가를 놓치고 있습니까 아니면 누구든지 해결 방법을 제안 할 수 있습니까?

감사.

도움이 되었습니까?

해결책

오른쪽, 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):
   # ...
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top