Pergunta

Eu estou tentando obter minha página lona FBML para novos usuários de aplicativos automaticamente solicitam permissão para publish_stream. Seguinte documentação do Facebook Eu tentei usar o argumento required_permissions para require_login. Ou seja, eu tentei usar o decorador pyfacebook require_login assim:

@facebook.require_login(required_permissions='publish_stream')

como em:

@decorator_from_middleware(FacebookMiddleware)
@facebook.require_login(required_permissions='publish_stream')
def canvas(request, template):
   ...

Solicitando permissões estendidas em um Facebook iFrame aplicativo baseado pyfacebook tem sido discutido . Solicitando permissões estendidas em um aplicativo FBML também . Meu objetivo é requerem permissões estendidas em um aplicativo FBML. Estou faltando alguma coisa ou alguém pode sugerir uma solução alternativa?

Graças.

Foi útil?

Solução

Right, pyfacebook não ainda apoiar required_permissions para login, mas você pode chamar (ou melhor, redirecionamento para) authorize manualmente. Acabo de escrever o seguinte decorador para os meus propósitos:

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

Você pode ter de ajustar o valor de next como ele é passado para get_ext_perm_url, mas isso deve ser de outra forma finas (obras para mim). Exemplo de uso:

@facebook.require_login()
@facebook.require_add()
@require_permissions('email', 'offline_access')
def index(request):
   # ...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top