Question

Je suis en train de faire ma page toile FBML pour les nouveaux utilisateurs d'applications Demander automatiquement l'autorisation de publish_stream. documentation de Facebook J'ai essayé d'utiliser l'argument required_permissions à require_login. C'est, j'ai essayé d'utiliser le décorateur pyfacebook de require_login comme ceci:

@facebook.require_login(required_permissions='publish_stream')

comme dans:

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

Demande autorisations étendues dans une application basée pyfacebook-Facebook iFrame a été discuté . Demande autorisations étendues dans une application FBML trop . Mon objectif est de besoin autorisations étendues dans une application FBML. Est-ce que je manque quelque chose ou quelqu'un peut-il proposer une solution de contournement?

Merci.

Était-ce utile?

La solution

Droit, pyfacebook ne supporte pas encore required_permissions pour login, mais vous pouvez appeler (ou plutôt rediriger vers) authorize manuellement. Je viens d'écrire le décorateur suivant pour mes besoins:

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

Vous devrez peut-être modifier la valeur de next comme il est passé à get_ext_perm_url, mais cela ne devrait par ailleurs être bien (fonctionne pour moi). Exemple d'utilisation:

@facebook.require_login()
@facebook.require_add()
@require_permissions('email', 'offline_access')
def index(request):
   # ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top