python - 如何在 django 中注销用户(没有请求)
问题描述
在 django 中,我可以使用以下命令注销用户:
from django.contrib.auth import logout
logout(request)
但是,我将如何手动注销使用——例如,我想“将用户从所有选项卡中注销”——也就是说,如何在我的数据库中刷新该用户的所有会话?
解决方案
您可以将以下方法添加到您的用户对象:
from django.utils import timezone
from django.contrib.sessions.models import Session
class User(models.model):
...
def remove_all_sessions(self):
user_sessions = []
all_sessions = Session.objects.filter(expire_date__gte=timezone.now())
for session in Session.objects.all():
if str(self.pk) == session.get_decoded().get('_auth_user_id'):
user_sessions.append(session.pk)
return Session.objects.filter(pk__in=user_sessions).delete()