diff --git a/README.md b/README.md index 0e5863f..54445ef 100644 --- a/README.md +++ b/README.md @@ -54,3 +54,10 @@ To redirect to a custom URL define the following setting: ```python SESSION_TIMEOUT_REDIRECT = 'your_redirect_url_here/' ``` + + +To disable redirect add : + +```python +SESSION_TIMEOUT_TO_REDIRECT = False +``` diff --git a/src/django_session_timeout/middleware.py b/src/django_session_timeout/middleware.py index bda7fcb..df457b0 100644 --- a/src/django_session_timeout/middleware.py +++ b/src/django_session_timeout/middleware.py @@ -29,10 +29,14 @@ def process_request(self, request): if session_is_expired: request.session.flush() redirect_url = getattr(settings, "SESSION_TIMEOUT_REDIRECT", None) - if redirect_url: + to_redirect = getattr(settings, "SESSION_TIMEOUT_TO_REDIRECT", True) + + if redirect_url and to_redirect: return redirect(redirect_url) - else: + elif to_redirect: return redirect_to_login(next=request.path) + else: + return expire_since_last_activity = getattr( settings, "SESSION_EXPIRE_AFTER_LAST_ACTIVITY", False diff --git a/tests/test_middleware.py b/tests/test_middleware.py index 00e49a5..c7cb0f7 100644 --- a/tests/test_middleware.py +++ b/tests/test_middleware.py @@ -144,3 +144,38 @@ def test_session_expire_last_activity_grace_not_update(r, settings): response = middleware.process_request(r) assert SESSION_TIMEOUT_KEY not in r.session assert response["location"] == "/accounts/login/?next=/" + + +def test_session_expire_to_redirect(r, settings): + settings.SESSION_EXPIRE_SECONDS = 3600 + settings.SESSION_TIMEOUT_REDIRECT = "/foobar/" + settings.SESSION_TIMEOUT_TO_REDIRECT = True + middleware = SessionTimeoutMiddleware() + + with freeze_time("2017-08-31 21:46:00"): + assert middleware.process_request(r) is None + + with freeze_time("2017-08-31 22:46:01"): + response = middleware.process_request(r) + assert response["location"] == "/foobar/" + + settings.SESSION_TIMEOUT_TO_REDIRECT = False + response = middleware.process_request(r) + assert response is None + +def test_session_expire_to_redirect_login(r, settings): + settings.SESSION_EXPIRE_SECONDS = 3600 + settings.SESSION_TIMEOUT_TO_REDIRECT = True + settings.SESSION_TIMEOUT_REDIRECT = None + middleware = SessionTimeoutMiddleware() + + with freeze_time("2017-08-31 21:46:00"): + assert middleware.process_request(r) is None + + with freeze_time("2017-08-31 22:46:01"): + response = middleware.process_request(r) + assert response["location"] == "/accounts/login/?next=/" + + settings.SESSION_TIMEOUT_TO_REDIRECT = False + response = middleware.process_request(r) + assert response is None