Add a Session Timeout in Django
Auto logout a user after specific time in Django.
1. Install dependencies
pip install django-auto-logout
# pip install pytz
2. Append to settings middlewares
MIDDLEWARE = [
...
'django_auto_logout.middleware.auto_logout',
]
Make sure that the following middlewares are used before doing this:
- mdjango.contrib.sessions.middleware.SessionMiddleware
- django.contrib.auth.middleware.AuthenticationMiddleware
- django.contrib.messages.middleware.MessageMiddleware
3. Modify context_processors in settings.py:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
# !!! Add this !!!
'django_auto_logout.context_processors.auto_logout_client',
],
},
},
]
4. Add this to your templates (will add a redirect script to your html):
{{ redirect_to_login_immediately }}
5. Add below lines in settings.py
AUTO_LOGOUT = {
'IDLE_TIME': 600,
'REDIRECT_TO_LOGIN_IMMEDIATELY': True,
'MESSAGE': 'The session has expired. Please login again to continue.'
}
6. Display messages in templates:
{% for message in messages %}
<div class="message {{ message.tags }}">
{{ message }}
</div>
{% endfor %}