【发布时间】: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