1

FBML キャンバス ページを取得して、新しいアプリ ユーザーに publish_stream の許可を自動的に求めようとしています。Facebook のドキュメントに従って、require_login に required_permissions 引数を使用してみました。つまり、次のように 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 アプリで拡張アクセス許可を要求することです。何か不足していますか、それとも回避策を提案できますか?

ありがとう。

4

1 に答える 1

2

確かに、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):
   # ...
于 2010-03-14T00:17:13.280 に答える