Redundant post requests to /rest/auth/refresh
cziaarm opened this issue · 1 comments
cziaarm commented
Copied from Transkribus/TranskribusWebUI#5 by @bejohu
Current session is being refreshed unnecessarily:
Prior to any non-cached request to endpoint, here rest/collections/XXXX/XXXX/1/list, the session is refreshed, thereby doubling round-trip time:
### [POST REQUEST] t_refresh will POST: https://transkribus.eu/TrpServer/rest/auth/refresh
### t_refresh response STATUS_CODE: 200
### IN t_page: https://transkribus.eu/TrpServer/rest/collections/******/*****/1/list
### [HAVE CACHE] t_page HAS CACHED page for: https://transkribus.eu/TrpServer/rest/collections/4/6201/1/list
def t_login_required(function, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None):
@wraps(function)
def wrapper(request, *args, **kw):
if request.user.is_authenticated():
if not t_refresh(): # <----------------
return HttpResponseRedirect('/logout?next={!s}'.format(request.get_full_path()))
[...]
return function(request, *args, **kw)
Might be possible to improve this doing something like this:
def post_some_data(data):
r = session.post('https://example.com/', data={'some': 'data'})
[...]
r.raise_for_status() # raises exception unless request was successful
[...]
return result
The decorator could then look like this:
def t_login_required(function, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None):
@wraps(func)
def wrapper(request, *args, **kwargs):
if request.user.is_authenticated():
[...]
response = None
try:
response = func(request, *args, **kwargs)
except HTTPError as e:
if e.status_code not in (401, 403):
raise e
response = HttpResponseRedirect("/logout?next={!s}".format(request.get_full_path()))
return response
Maybe, the session could be refreshed depending on time elapsed since last request stored in session:
[...]
def wrapper(request, *args, **kwargs):
if request.user.is_authenticated():
if is_required_refresh(request):
if not t_refresh(request):
[...]
return [...]
[...]
response = None
try:
response = func(request, *args, **kwargs)
except HTTPError as e:
[...]
cziaarm commented
This has been someway implemented, though now have removed the t.refresh calls as they are not needed now that we are keeping the transkribus session with the django user