如何在 django 中注销用户(没有请求)

8 python django

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

from django.contrib.auth import logout
logout(request)
Run Code Online (Sandbox Code Playgroud)

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

小智 6

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

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()
Run Code Online (Sandbox Code Playgroud)