如果从其他设备/浏览器登录,则Django会撤消会话密钥

时间:2019-05-26 12:30:33

标签: django session middleware

我想在用户从另一台设备登录后立即撤消旧会话,但是如果我在此处使用会话刷新,则会从所有浏览器注销。为此有一个解决方案:

middleware.py

from django.contrib.sessions.models import Session
# Session model stores the session data
from .models import LoggedInUser


class OneSessionPerUserMiddleware:
    # Called only once when the web server starts
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if request.user.is_authenticated:
            session_key = request.session.session_key
            try:
                logged_in_user = request.user.logged_in_user
                stored_session_key = logged_in_user.session_key
                if stored_session_key != session_key:
                    Session.objects.filter(session_key=stored_session_key).delete()
                logged_in_user.session_key = session_key
                logged_in_user.save()
            except LoggedInUser.DoesNotExist:
                LoggedInUser.objects.create(user=request.user, session_key=session_key)
        response = self.get_response(request)
        return response

0 个答案:

没有答案