当使用 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,我的问题得到解决。
但这很糟糕,糟糕的黑客行为。有没有更好、更优雅的方式?谢谢!