4

Facebook では、Facebook ログインを使用する場合、最初にユーザーに要求する許可をできるだけ少なくし、特に、ユーザーがサイト経由で何かを公開する必要があるまで公開許可を要求しないようにすることをお勧めします - https://developers.facebook.com/docs/ facebook-login/permissions/#optimizing .

python-social-auth の django アプリを使用してこれを実装しようとしてきましたが、サイトのさまざまなポイントでさまざまな権限を要求する方法がないようです - スコープは設定によってSOCIAL_AUTH_FACEBOOK_SCOPE設定されており、要求することはできません後で別のスコープに適用します (たとえば、 から除外publish_actionsSOCIAL_AUTH_FACEBOOK_SCOPE、ユーザーがサイトから facebook に投稿しようとしたときにその許可を提供するように依頼します)。

これが python-social-auth アプリで可能かどうかは誰にもわかりますか?もしそうなら、どうやって?

4

1 に答える 1

4

(次のテキストはhttp://psa.matiasaguirre.net/docs/use_cases.html#multiple-scopes-per-providerのドキュメントから抜粋したものです)

現時点では、python-social-auth は単一のバックエンドに対して複数のスコープを定義する方法を提供していません。ユーザーに可能な限り最小のスコープを要求し、本当に必要なときにアクセスを増やすことが推奨されるため、これは通常望ましいことです。元のバックエンドを拡張する新しいバックエンドを追加して、その動作を実現することができます。これには 2 つの方法があります。

オーバーライドget_scope()方法

from social.backends.facebook import FacebookOAuth2


class CustomFacebookOAuth2(FacebookOauth2):
    def get_scope(self):
        scope = super(CustomFacebookOAuth2, self).get_scope()
        if self.data.get('extrascope'):
            scope += [('foo', 'bar')]
        return scope

このメソッドは非常に単純です。バックエンドでスコープ値を返すメソッド ( ) をオーバーライドし、またはデータ ( )get_scope()のパラメーターで指定されている場合は、リストに追加の値を追加します。GETPOSTself.data

この新しいバックエンドをプロジェクトのどこかに配置し、オリジナルをこの新しいバージョンに置き換えFacebookOAuth2ますAUTHENTICATION_BACKENDS

スコープを処理するバックエンドの定義

元のバックエンドから拡張された名前を上書きする 2 番目のバックエンドを定義することで同じことを行うことができます。これは、新しい URL と新しいバックエンドの新しい設定も意味します (名前は設定名を作成するために使用されるため)。すべてのプロバイダーが複数のリダイレクト URL を定義するオプションを提供しているわけではないため、プロバイダーの新しいアプリケーション。それを行うには、次のようなバックエンドを追加するだけです:

from social.backends.facebook import FacebookOAuth2


class CustomFacebookOAuth2(FacebookOauth2):
    name = 'facebook-custom'

この新しいバックエンドをプロジェクト内のどこかに配置し、オリジナルFacebookOAuth2を に保持しますAUTHENTICATION_BACKENDS。これで、新しい一連の URL が機能します。

/login/facebook-custom
/complete/facebook-custom
/disconnect/facebook-custom

また、新しい設定のセット:

SOCIAL_AUTH_FACEBOOK_CUSTOM_KEY = '...'
SOCIAL_AUTH_FACEBOOK_CUSTOM_SECRET = '...'
SOCIAL_AUTH_FACEBOOK_CUSTOM_SCOPE = [...]

追加のアクセス許可が必要な場合は、ユーザーをリダイレクトして/login/facebook-custom、この新しいバックエンドのソーシャル認証エントリを取得し、その中でuser.social_auth.get(provider='facebook-custom')を使用access_tokenします。

于 2014-03-18T23:39:32.837 に答える