Добры день!
Задача убить сессию юзера, если тот забанен, чтобы он не мог больше производить никаких действий на сайте. Нужно чтобы работало с любым бекэндом.
Делаю так, на метод save вешаю код:
def save(self, *args, **kwargs):
if not self.is_active:
SESSION_ENGINE = getattr(settings, 'SESSION_ENGINE', 'db')
session_engine = SESSION_ENGINE.split('.')[-1]
if session_engine == 'db' or session_engine == 'cached_db':
[s.delete() for s in Session.objects.all() if s.get_decoded().get('_auth_user_id') == self.id]
if session_engine == 'cache' or session_engine == 'cached_db':
for key in cache.keys('django.contrib.sessions.cache*'):
key_from_cache = cache.get(key)
if '_auth_user_hash' in key_from_cache \
and key_from_cache['_auth_user_hash'] == self.get_session_auth_hash():
cache.delete(key)
if session_engine == 'file':
pass
if session_engine == 'signed_cookies':
pass
super().save(*args, **kwargs)
Вопрос как реализовать механизм для удаления сессий если используется файловая система или куки. Возможно есть более простой и правильный путь решения задачи.