Требуются расширенные разрешения в приложении FBML pyfacebook

StackOverflow https://stackoverflow.com/questions/2440327

  •  19-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь заставить мою страницу FBML canvas автоматически запрашивать у новых пользователей приложения разрешение на 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):
   ...

Запрашивающий расширенные разрешения в приложении Facebook iFrame на базе pyfacebook было обсуждено. Запрашивающий расширенные разрешения в приложении 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