Я, кажется, решил это довольно круглым, хакерским способом.Я опубликую это здесь на тот случай, если кто-нибудь еще посмотрит с подобной проблемой.
Сначала я должен был настроить бэкэнд хранилища на использование сессий, а не на то, что по умолчанию.Я думал, что по умолчанию были сеансы, но из проверки базы данных я ее не увидел.
# settings.py
MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
Затем я добавил обработчик к сигналу user.is_logged_in:
def kick_my_other_sessions(sender, request=None, user=None, **kwargs):
from django.contrib.messages import constants
from django.contrib.messages.storage.base import Message
from django.contrib.sessions.backends.db import SessionStore
from django.contrib.sessions.models import Session
from tracking.models import Visitor
keys = [v.session_key for v in Visitor.objects.filter(user=request.user).exclude(session_key=request.session.session_key)]
for session in Session.objects.filter(session_key__in=keys):
s = SessionStore(session.session_key)
# Hack to log the user out without expiring the session immediately,
# otherwise they'll never see their message
s["_auth_user_id"] = 0
# The _messages property is a list of Message objects
s["_messages"] = [Message(constants.ERROR, "You've been logged out because someone else has logged into your account from another computer.")]
s.save()
И это все.Первоначально я просто удалил сеанс, но таким (по общему признанию хакерским) способом я могу выйти из системы и позволить ему сохранить сеанс, чтобы они могли видеть свое сообщение.