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

Can you invalidate a specific user's session on deactivate?

我为 Django 用户模型在代理 class 上定义了一个停用方法,以防止他们登录(例如,如果他们逾期),但是如果他们仍然登录,我会喜欢使他们所有的会话无效。

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

由于会话是经过编码的,因此最好不要遍历它们并对每个会话进行解码以找到与该用户关联的会话。我已经查看了 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()

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