【问题标题】:Can you invalidate a specific user's session on deactivate?您可以在停用时使特定用户的会话无效吗?
【发布时间】:2015-11-03 20:36:55
【问题描述】:

我在 Django User 模型的代理类上定义了一个 deactivate 方法,以防止他们登录(例如,如果他们过期了),但是如果他们仍然登录,我想使他们的所有内容无效会议。

有没有 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()

【问题讨论】:

  • 为什么不使用 django.contrib.auth.logout() ,因为您正在其他地方处理其余功能。
  • logout() 使用 session.flush(),它工作得很好,因为它被传递到该用户的请求对象和会话密钥中。我的情况不同,因为我试图刷新所有不同用户的会话,我不知道他们的密钥。

标签: python django session logout invalidation


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2019-05-21
    • 1970-01-01
    • 2016-05-12
    相关资源
    最近更新 更多