首页 > 解决方案 > 如何在 django 中注销用户(没有请求)

问题描述

在 django 中,我可以使用以下命令注销用户:

from django.contrib.auth import logout
logout(request)

但是,我将如何手动注销使用——例如,我想“将用户从所有选项卡中注销”——也就是说,如何在我的数据库中刷新该用户的所有会话?

标签: pythondjango

解决方案


您可以将以下方法添加到您的用户对象:

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

推荐阅读