2

FB/Google を使用してサイトにログインしたユーザーがブラウザを閉じたときに強制的に再ログインする方法を探しています。私はhttps://django-social-auth.readthedocs.org/en/latest/configuration.htmlを読んでいましたが、そうは思いません:

SOCIAL_AUTH_EXPIRATION = 'expires' 

また

SOCIAL_AUTH_SESSION_EXPIRATION = True

本当に私が探していることをします。パイプラインの最後のものとして有効期限を 0 に設定するこの方法でカスタム パイプラインを追加しようとしました。

def expire_session_on_browser_close(backend, details, response, social_user, uid, user, request, *args, **kwargs):
    request.session.set_expiry(0)

SOCIAL_AUTH_PIPELINE = (
    'social_auth.backends.pipeline.social.social_auth_user',
    #'social_auth.backends.pipeline.associate.associate_by_email',
    'social_auth.backends.pipeline.user.get_username',
    'social_auth.backends.pipeline.user.create_user',
    'social_auth.backends.pipeline.social.associate_user',
    'social_auth.backends.pipeline.social.load_extra_data',
    'social_auth.backends.pipeline.user.update_user_details',
    'useraccount.pipeline.expire_session_on_browser_close',
)

しかし、それは効果がないようです。設定

SESSION_EXPIRE_AT_BROWSER_CLOSE = True 

も効果がありません。

同様に、私のサイトではユーザーが「伝統的に」ログインすることもできます。

request.session.set_expiry(0)

そこでトリックを実行すると、ユーザーはブラウザーを閉じるときにログインを強制されます。FB/Google ログインでは機能しません。

何かご意見は?

ありがとう!

編集:

私が行っていじくり回すと:

UserSocialAuthMixin::expiration_datetime() 

から

db\base.py

強制的に0を返すと、問題は解決します。

しかし、これは悪い、悪いハッカーです。より良い、よりエレガントな方法はありますか? ありがとう!

4

1 に答える 1

1

ああ、私はこれをN度までオーバーエンジニアリングしました。私がする必要があったのは、次のように設定することだけでした:

SOCIAL_AUTH_SESSION_EXPIRATION=False

このように、プロバイダーの応答に「期限切れ」または SOCIAL_AUTH_EXPIRATION に含まれるものが含まれている場合、django-social-auth はその解析された値に対して set_expiry() を呼び出しません。

さらに、パイプライン関数も設定して (元の質問に見られるように)、独自の有効期限 (私の場合は 0) を設定できるようにしました。

于 2013-01-05T21:21:29.703 に答える