当我使用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,我的问题得到解决。
但这是糟糕的,糟糕的hackery。有更好,更优雅的方式吗? 谢谢!
答案 0 :(得分:1)
哦,伙计,我过度设计到了N度。我需要做的就是设置:
SOCIAL_AUTH_SESSION_EXPIRATION=False
这样,如果提供者的响应包含'expires'或SOCIAL_AUTH_EXPIRATION包含的任何内容,则django-social-auth不会对该解析的值调用set_expiry()。
此外,我还设置了管道功能(如我原来的问题所示),以便我可以设置自己的到期时间(在我的情况下为0)。