ситуация - юзер залогинен на трех компьютерах под одним логином. На одном из них он изменил себе пароль. На двух других он должен быть насильно разлогинен (другими словами, при следующем запросе к сайту он увидит его как анонимный пользователь).
Как это сделать? Есть ли родные способы в Django для этого?
Делается довольно просто: в хеш зашивается поле, к которому сессия должна быть чувствительна. В вашем случае пароль. Получается, что когда пользователь сменит пароль, то все старые сессии станут невалидны автоматом и ничего перебирать не придется.
Родных способов вроде нет
Сделать это можно по-разному: можно перебирать все сессии, но это неэффективно
можно завести для пользователя поля last_login_date и force_logout_date и сравнивать их
Да, это уже похоже на решение. Вопрос только в апдейте Django. Сейчас текущая 1.8. В документации стоит предупреждение -
If you are upgrading an existing site and wish to enable this middleware without requiring all your users to re-login afterward, you should first upgrade to Django 1.7 and run it for a while so that as sessions are naturally recreated as users login, they include the session hash as described above
Мы конечно апгрейдим existing site и залогиненные пользователи должны остаться залогиненными. Если мы сразу апгрейдимся на 1.8, не включая SessionAuthenticationMiddleware - слетит /не слетит?