您是否可以在停用时使特定用户的会话无效?

时间:2015-11-03 20:36:56

标签: python django session logout invalidation

我在Django User模型的代理类上定义了一个deactivate方法,以防止它们登录(例如,如果它们是过期的),但是如果它们仍然登录,我想让它们全部无效会话。

是否有Django认可或Pythonic方式来做到这一点?

由于Sessions是编码的,因此不宜迭代它们并对每一个进行解码以找到与该用户相关的那些。我已经看过Django支持的密码更改失效会话,但在我的情况下,用户没有更改自己的密码,而是强迫他们注销。这是我的CustomUser模型:

class CustomUser(User):
        class Meta:
            proxy = True

        def deactivate(self):
            if self.is_active:
                self.is_active = False
                self.save()

        def activate(self):
            if not self.is_active:
                self.is_active = True
                self.save()

1 个答案:

答案 0 :(得分:0)

在session_data上使用Session.objects.distinct()结束,将集合从130万减少到大约7000个唯一的session_data哈希值。整洁的技巧,但真的希望Django有一个规定的解决方案。