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

这样,如果 Provider 的响应包含 'expires' 或任何 SOCIAL_AUTH_EXPIRATION 包含的内容,django-social-auth 将不会在该解析值上调用 set_expiry() 。

此外,我还设置了管道功能(如我原来的问题中所见),以便我可以设置自己的到期时间(在我的情况下为 0)。

于 2013-01-05T21:21:29.703 回答